├── .DS_Store ├── .gitignore ├── Examples ├── 1Q4_Axi.txt ├── 1Q4_CamClay copy.txt ├── 1Q4_CamClay.txt ├── 1Q4_Plast.txt ├── 1Q4_Plast_DispImp.txt ├── 1elemQ4_DispImp.txt ├── 1elemQ8.txt ├── 1elemQ8_Axis.txt ├── 2T3_DispImp.txt ├── 2elemQ8.txt ├── 4Q4_Plast.txt ├── 4Q4_Plast_PrescDisp.txt ├── 4elemQ8.txt ├── 4elemQ8_DispImp.txt ├── 4elemQ8_DistLoading.txt ├── 4elemQ8_DistLoading_Axisym.txt ├── E1Q4_Axi.txt ├── Example_2D_p542.txt ├── Example_2D_p542_Original.txt ├── Example_2D_p542_ext.txt ├── Example_one_elem_4d.txt ├── Example_two_elem.4d.txt ├── Example_two_elem.txt ├── Example_two_elem_dispImp.txt ├── FEM_1Q4.nb ├── LimeTreatedSoils.txt └── Oudin_Exemple_plast.nb ├── PostProcessing ├── .idea │ ├── .name │ ├── Postprocessing.iml │ ├── dictionaries │ │ └── viktor.xml │ ├── encodings.xml │ ├── misc.xml │ ├── modules.xml │ ├── other.xml │ ├── scopes │ │ └── scope_settings.xml │ ├── testrunner.xml │ ├── vcs.xml │ └── workspace.xml ├── Output │ ├── Deviatoric │ │ ├── deviatoric (Victors-MacBook-Pro's conflicted copy 2014-04-07 (1)).txt │ │ ├── deviatoric (Victors-MacBook-Pro's conflicted copy 2014-04-07).txt │ │ └── deviatoric.txt │ ├── conntable.txt │ ├── coordinates.txt │ ├── displacements.txt │ ├── displacements2.txt │ ├── output_increm │ │ ├── displacements │ │ │ ├── 0.dat │ │ │ ├── 1.dat │ │ │ ├── 10.dat │ │ │ ├── 100.dat │ │ │ ├── 101.dat │ │ │ ├── 102.dat │ │ │ ├── 103.dat │ │ │ ├── 104.dat │ │ │ ├── 105.dat │ │ │ ├── 106.dat │ │ │ ├── 107.dat │ │ │ ├── 108.dat │ │ │ ├── 109.dat │ │ │ ├── 11.dat │ │ │ ├── 110.dat │ │ │ ├── 111.dat │ │ │ ├── 112.dat │ │ │ ├── 113.dat │ │ │ ├── 114.dat │ │ │ ├── 115.dat │ │ │ ├── 116.dat │ │ │ ├── 117.dat │ │ │ ├── 118.dat │ │ │ ├── 119.dat │ │ │ ├── 12.dat │ │ │ ├── 120.dat │ │ │ ├── 121.dat │ │ │ ├── 122.dat │ │ │ ├── 123.dat │ │ │ ├── 124.dat │ │ │ ├── 125.dat │ │ │ ├── 126.dat │ │ │ ├── 127.dat │ │ │ ├── 128.dat │ │ │ ├── 129.dat │ │ │ ├── 13.dat │ │ │ ├── 130.dat │ │ │ ├── 131.dat │ │ │ ├── 132.dat │ │ │ ├── 133.dat │ │ │ ├── 134.dat │ │ │ ├── 135.dat │ │ │ ├── 136.dat │ │ │ ├── 137.dat │ │ │ ├── 138.dat │ │ │ ├── 139.dat │ │ │ ├── 14.dat │ │ │ ├── 140.dat │ │ │ ├── 141.dat │ │ │ ├── 142.dat │ │ │ ├── 143.dat │ │ │ ├── 144.dat │ │ │ ├── 145.dat │ │ │ ├── 146.dat │ │ │ ├── 147.dat │ │ │ ├── 148.dat │ │ │ ├── 149.dat │ │ │ ├── 15.dat │ │ │ ├── 150.dat │ │ │ ├── 151.dat │ │ │ ├── 152.dat │ │ │ ├── 153.dat │ │ │ ├── 154.dat │ │ │ ├── 155.dat │ │ │ ├── 156.dat │ │ │ ├── 157.dat │ │ │ ├── 158.dat │ │ │ ├── 159.dat │ │ │ ├── 16.dat │ │ │ ├── 160.dat │ │ │ ├── 161.dat │ │ │ ├── 162.dat │ │ │ ├── 163.dat │ │ │ ├── 164.dat │ │ │ ├── 165.dat │ │ │ ├── 166.dat │ │ │ ├── 167.dat │ │ │ ├── 168.dat │ │ │ ├── 169.dat │ │ │ ├── 17.dat │ │ │ ├── 170.dat │ │ │ ├── 171.dat │ │ │ ├── 172.dat │ │ │ ├── 173.dat │ │ │ ├── 174.dat │ │ │ ├── 175.dat │ │ │ ├── 176.dat │ │ │ ├── 177.dat │ │ │ ├── 178.dat │ │ │ ├── 179.dat │ │ │ ├── 18.dat │ │ │ ├── 180.dat │ │ │ ├── 181.dat │ │ │ ├── 182.dat │ │ │ ├── 183.dat │ │ │ ├── 184.dat │ │ │ ├── 185.dat │ │ │ ├── 186.dat │ │ │ ├── 187.dat │ │ │ ├── 188.dat │ │ │ ├── 189.dat │ │ │ ├── 19.dat │ │ │ ├── 190.dat │ │ │ ├── 191.dat │ │ │ ├── 192.dat │ │ │ ├── 193.dat │ │ │ ├── 194.dat │ │ │ ├── 195.dat │ │ │ ├── 196.dat │ │ │ ├── 197.dat │ │ │ ├── 198.dat │ │ │ ├── 199.dat │ │ │ ├── 2.dat │ │ │ ├── 20.dat │ │ │ ├── 200.dat │ │ │ ├── 21.dat │ │ │ ├── 22.dat │ │ │ ├── 23.dat │ │ │ ├── 24.dat │ │ │ ├── 25.dat │ │ │ ├── 26.dat │ │ │ ├── 27.dat │ │ │ ├── 28.dat │ │ │ ├── 29.dat │ │ │ ├── 3.dat │ │ │ ├── 30.dat │ │ │ ├── 31.dat │ │ │ ├── 32.dat │ │ │ ├── 33.dat │ │ │ ├── 34.dat │ │ │ ├── 35.dat │ │ │ ├── 36.dat │ │ │ ├── 37.dat │ │ │ ├── 38.dat │ │ │ ├── 39.dat │ │ │ ├── 4.dat │ │ │ ├── 40.dat │ │ │ ├── 41.dat │ │ │ ├── 42.dat │ │ │ ├── 43.dat │ │ │ ├── 44.dat │ │ │ ├── 45.dat │ │ │ ├── 46.dat │ │ │ ├── 47.dat │ │ │ ├── 48.dat │ │ │ ├── 49.dat │ │ │ ├── 5.dat │ │ │ ├── 50.dat │ │ │ ├── 51.dat │ │ │ ├── 52.dat │ │ │ ├── 53.dat │ │ │ ├── 54.dat │ │ │ ├── 55.dat │ │ │ ├── 56.dat │ │ │ ├── 57.dat │ │ │ ├── 58.dat │ │ │ ├── 59.dat │ │ │ ├── 6.dat │ │ │ ├── 60.dat │ │ │ ├── 61.dat │ │ │ ├── 62.dat │ │ │ ├── 63.dat │ │ │ ├── 64.dat │ │ │ ├── 65.dat │ │ │ ├── 66.dat │ │ │ ├── 67.dat │ │ │ ├── 68.dat │ │ │ ├── 69.dat │ │ │ ├── 7.dat │ │ │ ├── 70.dat │ │ │ ├── 71.dat │ │ │ ├── 72.dat │ │ │ ├── 73.dat │ │ │ ├── 74.dat │ │ │ ├── 75.dat │ │ │ ├── 76.dat │ │ │ ├── 77.dat │ │ │ ├── 78.dat │ │ │ ├── 79.dat │ │ │ ├── 8.dat │ │ │ ├── 80.dat │ │ │ ├── 81.dat │ │ │ ├── 82.dat │ │ │ ├── 83.dat │ │ │ ├── 84.dat │ │ │ ├── 85.dat │ │ │ ├── 86.dat │ │ │ ├── 87.dat │ │ │ ├── 88.dat │ │ │ ├── 89.dat │ │ │ ├── 9.dat │ │ │ ├── 90.dat │ │ │ ├── 91.dat │ │ │ ├── 92.dat │ │ │ ├── 93.dat │ │ │ ├── 94.dat │ │ │ ├── 95.dat │ │ │ ├── 96.dat │ │ │ ├── 97.dat │ │ │ ├── 98.dat │ │ │ └── 99.dat │ │ ├── plastic_strains │ │ │ ├── 0 │ │ │ ├── 1 │ │ │ ├── 2 │ │ │ ├── 3 │ │ │ ├── 4 │ │ │ ├── 5 │ │ │ ├── 6 │ │ │ ├── 7 │ │ │ ├── 8 │ │ │ ├── 9 │ │ │ ├── 10 │ │ │ ├── 11 │ │ │ ├── 12 │ │ │ ├── 13 │ │ │ ├── 14 │ │ │ ├── 15 │ │ │ ├── 16 │ │ │ ├── 17 │ │ │ ├── 18 │ │ │ ├── 19 │ │ │ ├── 20 │ │ │ ├── 21 │ │ │ ├── 22 │ │ │ ├── 23 │ │ │ ├── 24 │ │ │ ├── 25 │ │ │ ├── 26 │ │ │ ├── 27 │ │ │ ├── 28 │ │ │ ├── 29 │ │ │ ├── 30 │ │ │ ├── 31 │ │ │ ├── 32 │ │ │ ├── 33 │ │ │ ├── 34 │ │ │ ├── 35 │ │ │ ├── 36 │ │ │ ├── 37 │ │ │ ├── 38 │ │ │ ├── 39 │ │ │ ├── 40 │ │ │ ├── 41 │ │ │ ├── 42 │ │ │ ├── 43 │ │ │ ├── 44 │ │ │ ├── 45 │ │ │ ├── 46 │ │ │ ├── 47 │ │ │ ├── 48 │ │ │ ├── 49 │ │ │ ├── 50 │ │ │ ├── 51 │ │ │ ├── 52 │ │ │ ├── 53 │ │ │ ├── 54 │ │ │ ├── 55 │ │ │ ├── 56 │ │ │ ├── 57 │ │ │ ├── 58 │ │ │ ├── 59 │ │ │ ├── 60 │ │ │ ├── 61 │ │ │ ├── 62 │ │ │ ├── 63 │ │ │ ├── 64 │ │ │ ├── 65 │ │ │ ├── 66 │ │ │ ├── 67 │ │ │ ├── 68 │ │ │ ├── 69 │ │ │ ├── 70 │ │ │ ├── 71 │ │ │ ├── 72 │ │ │ ├── 73 │ │ │ ├── 74 │ │ │ ├── 75 │ │ │ ├── 76 │ │ │ ├── 77 │ │ │ ├── 78 │ │ │ ├── 79 │ │ │ ├── 80 │ │ │ ├── 81 │ │ │ ├── 82 │ │ │ ├── 83 │ │ │ ├── 84 │ │ │ ├── 85 │ │ │ ├── 86 │ │ │ ├── 87 │ │ │ ├── 88 │ │ │ ├── 89 │ │ │ ├── 90 │ │ │ ├── 91 │ │ │ ├── 92 │ │ │ ├── 93 │ │ │ ├── 94 │ │ │ ├── 95 │ │ │ ├── 96 │ │ │ ├── 97 │ │ │ ├── 98 │ │ │ ├── 99 │ │ │ ├── 100 │ │ │ ├── 101 │ │ │ ├── 102 │ │ │ ├── 103 │ │ │ ├── 104 │ │ │ ├── 105 │ │ │ ├── 106 │ │ │ ├── 107 │ │ │ ├── 108 │ │ │ ├── 109 │ │ │ ├── 110 │ │ │ ├── 111 │ │ │ ├── 112 │ │ │ ├── 113 │ │ │ ├── 114 │ │ │ ├── 115 │ │ │ ├── 116 │ │ │ ├── 117 │ │ │ ├── 118 │ │ │ ├── 119 │ │ │ ├── 120 │ │ │ ├── 121 │ │ │ ├── 122 │ │ │ ├── 123 │ │ │ ├── 124 │ │ │ ├── 125 │ │ │ ├── 126 │ │ │ ├── 127 │ │ │ ├── 128 │ │ │ ├── 129 │ │ │ ├── 130 │ │ │ ├── 131 │ │ │ ├── 132 │ │ │ ├── 133 │ │ │ ├── 134 │ │ │ ├── 135 │ │ │ ├── 136 │ │ │ ├── 137 │ │ │ ├── 138 │ │ │ ├── 139 │ │ │ ├── 140 │ │ │ ├── 141 │ │ │ ├── 142 │ │ │ ├── 143 │ │ │ ├── 144 │ │ │ ├── 145 │ │ │ ├── 146 │ │ │ ├── 147 │ │ │ ├── 148 │ │ │ ├── 149 │ │ │ ├── 150 │ │ │ ├── 151 │ │ │ ├── 152 │ │ │ ├── 153 │ │ │ ├── 154 │ │ │ ├── 155 │ │ │ ├── 156 │ │ │ ├── 157 │ │ │ ├── 158 │ │ │ ├── 159 │ │ │ ├── 160 │ │ │ ├── 161 │ │ │ ├── 162 │ │ │ ├── 163 │ │ │ ├── 164 │ │ │ ├── 165 │ │ │ ├── 166 │ │ │ ├── 167 │ │ │ ├── 168 │ │ │ ├── 169 │ │ │ ├── 170 │ │ │ ├── 171 │ │ │ ├── 172 │ │ │ ├── 173 │ │ │ ├── 174 │ │ │ ├── 175 │ │ │ ├── 176 │ │ │ ├── 177 │ │ │ ├── 178 │ │ │ ├── 179 │ │ │ ├── 180 │ │ │ ├── 181 │ │ │ ├── 182 │ │ │ ├── 183 │ │ │ ├── 184 │ │ │ ├── 185 │ │ │ ├── 186 │ │ │ ├── 187 │ │ │ ├── 188 │ │ │ ├── 189 │ │ │ ├── 190 │ │ │ ├── 191 │ │ │ ├── 192 │ │ │ ├── 193 │ │ │ ├── 194 │ │ │ ├── 195 │ │ │ ├── 196 │ │ │ ├── 197 │ │ │ ├── 198 │ │ │ ├── 199 │ │ │ └── 200 │ │ ├── reactions │ │ │ ├── 0.dat │ │ │ ├── 1.dat │ │ │ ├── 10.dat │ │ │ ├── 100.dat │ │ │ ├── 101.dat │ │ │ ├── 102.dat │ │ │ ├── 103.dat │ │ │ ├── 104.dat │ │ │ ├── 105.dat │ │ │ ├── 106.dat │ │ │ ├── 107.dat │ │ │ ├── 108.dat │ │ │ ├── 109.dat │ │ │ ├── 11.dat │ │ │ ├── 110.dat │ │ │ ├── 111.dat │ │ │ ├── 112.dat │ │ │ ├── 113.dat │ │ │ ├── 114.dat │ │ │ ├── 115.dat │ │ │ ├── 116.dat │ │ │ ├── 117.dat │ │ │ ├── 118.dat │ │ │ ├── 119.dat │ │ │ ├── 12.dat │ │ │ ├── 120.dat │ │ │ ├── 121.dat │ │ │ ├── 122.dat │ │ │ ├── 123.dat │ │ │ ├── 124.dat │ │ │ ├── 125.dat │ │ │ ├── 126.dat │ │ │ ├── 127.dat │ │ │ ├── 128.dat │ │ │ ├── 129.dat │ │ │ ├── 13.dat │ │ │ ├── 130.dat │ │ │ ├── 131.dat │ │ │ ├── 132.dat │ │ │ ├── 133.dat │ │ │ ├── 134.dat │ │ │ ├── 135.dat │ │ │ ├── 136.dat │ │ │ ├── 137.dat │ │ │ ├── 138.dat │ │ │ ├── 139.dat │ │ │ ├── 14.dat │ │ │ ├── 140.dat │ │ │ ├── 141.dat │ │ │ ├── 142.dat │ │ │ ├── 143.dat │ │ │ ├── 144.dat │ │ │ ├── 145.dat │ │ │ ├── 146.dat │ │ │ ├── 147.dat │ │ │ ├── 148.dat │ │ │ ├── 149.dat │ │ │ ├── 15.dat │ │ │ ├── 150.dat │ │ │ ├── 151.dat │ │ │ ├── 152.dat │ │ │ ├── 153.dat │ │ │ ├── 154.dat │ │ │ ├── 155.dat │ │ │ ├── 156.dat │ │ │ ├── 157.dat │ │ │ ├── 158.dat │ │ │ ├── 159.dat │ │ │ ├── 16.dat │ │ │ ├── 160.dat │ │ │ ├── 161.dat │ │ │ ├── 162.dat │ │ │ ├── 163.dat │ │ │ ├── 164.dat │ │ │ ├── 165.dat │ │ │ ├── 166.dat │ │ │ ├── 167.dat │ │ │ ├── 168.dat │ │ │ ├── 169.dat │ │ │ ├── 17.dat │ │ │ ├── 170.dat │ │ │ ├── 171.dat │ │ │ ├── 172.dat │ │ │ ├── 173.dat │ │ │ ├── 174.dat │ │ │ ├── 175.dat │ │ │ ├── 176.dat │ │ │ ├── 177.dat │ │ │ ├── 178.dat │ │ │ ├── 179.dat │ │ │ ├── 18.dat │ │ │ ├── 180.dat │ │ │ ├── 181.dat │ │ │ ├── 182.dat │ │ │ ├── 183.dat │ │ │ ├── 184.dat │ │ │ ├── 185.dat │ │ │ ├── 186.dat │ │ │ ├── 187.dat │ │ │ ├── 188.dat │ │ │ ├── 189.dat │ │ │ ├── 19.dat │ │ │ ├── 190.dat │ │ │ ├── 191.dat │ │ │ ├── 192.dat │ │ │ ├── 193.dat │ │ │ ├── 194.dat │ │ │ ├── 195.dat │ │ │ ├── 196.dat │ │ │ ├── 197.dat │ │ │ ├── 198.dat │ │ │ ├── 199.dat │ │ │ ├── 2.dat │ │ │ ├── 20.dat │ │ │ ├── 200.dat │ │ │ ├── 21.dat │ │ │ ├── 22.dat │ │ │ ├── 23.dat │ │ │ ├── 24.dat │ │ │ ├── 25.dat │ │ │ ├── 26.dat │ │ │ ├── 27.dat │ │ │ ├── 28.dat │ │ │ ├── 29.dat │ │ │ ├── 3.dat │ │ │ ├── 30.dat │ │ │ ├── 31.dat │ │ │ ├── 32.dat │ │ │ ├── 33.dat │ │ │ ├── 34.dat │ │ │ ├── 35.dat │ │ │ ├── 36.dat │ │ │ ├── 37.dat │ │ │ ├── 38.dat │ │ │ ├── 39.dat │ │ │ ├── 4.dat │ │ │ ├── 40.dat │ │ │ ├── 41.dat │ │ │ ├── 42.dat │ │ │ ├── 43.dat │ │ │ ├── 44.dat │ │ │ ├── 45.dat │ │ │ ├── 46.dat │ │ │ ├── 47.dat │ │ │ ├── 48.dat │ │ │ ├── 49.dat │ │ │ ├── 5.dat │ │ │ ├── 50.dat │ │ │ ├── 51.dat │ │ │ ├── 52.dat │ │ │ ├── 53.dat │ │ │ ├── 54.dat │ │ │ ├── 55.dat │ │ │ ├── 56.dat │ │ │ ├── 57.dat │ │ │ ├── 58.dat │ │ │ ├── 59.dat │ │ │ ├── 6.dat │ │ │ ├── 60.dat │ │ │ ├── 61.dat │ │ │ ├── 62.dat │ │ │ ├── 63.dat │ │ │ ├── 64.dat │ │ │ ├── 65.dat │ │ │ ├── 66.dat │ │ │ ├── 67.dat │ │ │ ├── 68.dat │ │ │ ├── 69.dat │ │ │ ├── 7.dat │ │ │ ├── 70.dat │ │ │ ├── 71.dat │ │ │ ├── 72.dat │ │ │ ├── 73.dat │ │ │ ├── 74.dat │ │ │ ├── 75.dat │ │ │ ├── 76.dat │ │ │ ├── 77.dat │ │ │ ├── 78.dat │ │ │ ├── 79.dat │ │ │ ├── 8.dat │ │ │ ├── 80.dat │ │ │ ├── 81.dat │ │ │ ├── 82.dat │ │ │ ├── 83.dat │ │ │ ├── 84.dat │ │ │ ├── 85.dat │ │ │ ├── 86.dat │ │ │ ├── 87.dat │ │ │ ├── 88.dat │ │ │ ├── 89.dat │ │ │ ├── 9.dat │ │ │ ├── 90.dat │ │ │ ├── 91.dat │ │ │ ├── 92.dat │ │ │ ├── 93.dat │ │ │ ├── 94.dat │ │ │ ├── 95.dat │ │ │ ├── 96.dat │ │ │ ├── 97.dat │ │ │ ├── 98.dat │ │ │ └── 99.dat │ │ ├── specific_volume │ │ │ ├── 0.dat │ │ │ ├── 1.dat │ │ │ ├── 10.dat │ │ │ ├── 100.dat │ │ │ ├── 101.dat │ │ │ ├── 102.dat │ │ │ ├── 103.dat │ │ │ ├── 104.dat │ │ │ ├── 105.dat │ │ │ ├── 106.dat │ │ │ ├── 107.dat │ │ │ ├── 108.dat │ │ │ ├── 109.dat │ │ │ ├── 11.dat │ │ │ ├── 110.dat │ │ │ ├── 111.dat │ │ │ ├── 112.dat │ │ │ ├── 113.dat │ │ │ ├── 114.dat │ │ │ ├── 115.dat │ │ │ ├── 116.dat │ │ │ ├── 117.dat │ │ │ ├── 118.dat │ │ │ ├── 119.dat │ │ │ ├── 12.dat │ │ │ ├── 120.dat │ │ │ ├── 121.dat │ │ │ ├── 122.dat │ │ │ ├── 123.dat │ │ │ ├── 124.dat │ │ │ ├── 125.dat │ │ │ ├── 126.dat │ │ │ ├── 127.dat │ │ │ ├── 128.dat │ │ │ ├── 129.dat │ │ │ ├── 13.dat │ │ │ ├── 130.dat │ │ │ ├── 131.dat │ │ │ ├── 132.dat │ │ │ ├── 133.dat │ │ │ ├── 134.dat │ │ │ ├── 135.dat │ │ │ ├── 136.dat │ │ │ ├── 137.dat │ │ │ ├── 138.dat │ │ │ ├── 139.dat │ │ │ ├── 14.dat │ │ │ ├── 140.dat │ │ │ ├── 141.dat │ │ │ ├── 142.dat │ │ │ ├── 143.dat │ │ │ ├── 144.dat │ │ │ ├── 145.dat │ │ │ ├── 146.dat │ │ │ ├── 147.dat │ │ │ ├── 148.dat │ │ │ ├── 149.dat │ │ │ ├── 15.dat │ │ │ ├── 150.dat │ │ │ ├── 151.dat │ │ │ ├── 152.dat │ │ │ ├── 153.dat │ │ │ ├── 154.dat │ │ │ ├── 155.dat │ │ │ ├── 156.dat │ │ │ ├── 157.dat │ │ │ ├── 158.dat │ │ │ ├── 159.dat │ │ │ ├── 16.dat │ │ │ ├── 160.dat │ │ │ ├── 161.dat │ │ │ ├── 162.dat │ │ │ ├── 163.dat │ │ │ ├── 164.dat │ │ │ ├── 165.dat │ │ │ ├── 166.dat │ │ │ ├── 167.dat │ │ │ ├── 168.dat │ │ │ ├── 169.dat │ │ │ ├── 17.dat │ │ │ ├── 170.dat │ │ │ ├── 171.dat │ │ │ ├── 172.dat │ │ │ ├── 173.dat │ │ │ ├── 174.dat │ │ │ ├── 175.dat │ │ │ ├── 176.dat │ │ │ ├── 177.dat │ │ │ ├── 178.dat │ │ │ ├── 179.dat │ │ │ ├── 18.dat │ │ │ ├── 180.dat │ │ │ ├── 181.dat │ │ │ ├── 182.dat │ │ │ ├── 183.dat │ │ │ ├── 184.dat │ │ │ ├── 185.dat │ │ │ ├── 186.dat │ │ │ ├── 187.dat │ │ │ ├── 188.dat │ │ │ ├── 189.dat │ │ │ ├── 19.dat │ │ │ ├── 190.dat │ │ │ ├── 191.dat │ │ │ ├── 192.dat │ │ │ ├── 193.dat │ │ │ ├── 194.dat │ │ │ ├── 195.dat │ │ │ ├── 196.dat │ │ │ ├── 197.dat │ │ │ ├── 198.dat │ │ │ ├── 199.dat │ │ │ ├── 2.dat │ │ │ ├── 20.dat │ │ │ ├── 200.dat │ │ │ ├── 21.dat │ │ │ ├── 22.dat │ │ │ ├── 23.dat │ │ │ ├── 24.dat │ │ │ ├── 25.dat │ │ │ ├── 26.dat │ │ │ ├── 27.dat │ │ │ ├── 28.dat │ │ │ ├── 29.dat │ │ │ ├── 3.dat │ │ │ ├── 30.dat │ │ │ ├── 31.dat │ │ │ ├── 32.dat │ │ │ ├── 33.dat │ │ │ ├── 34.dat │ │ │ ├── 35.dat │ │ │ ├── 36.dat │ │ │ ├── 37.dat │ │ │ ├── 38.dat │ │ │ ├── 39.dat │ │ │ ├── 4.dat │ │ │ ├── 40.dat │ │ │ ├── 41.dat │ │ │ ├── 42.dat │ │ │ ├── 43.dat │ │ │ ├── 44.dat │ │ │ ├── 45.dat │ │ │ ├── 46.dat │ │ │ ├── 47.dat │ │ │ ├── 48.dat │ │ │ ├── 49.dat │ │ │ ├── 5.dat │ │ │ ├── 50.dat │ │ │ ├── 51.dat │ │ │ ├── 52.dat │ │ │ ├── 53.dat │ │ │ ├── 54.dat │ │ │ ├── 55.dat │ │ │ ├── 56.dat │ │ │ ├── 57.dat │ │ │ ├── 58.dat │ │ │ ├── 59.dat │ │ │ ├── 6.dat │ │ │ ├── 60.dat │ │ │ ├── 61.dat │ │ │ ├── 62.dat │ │ │ ├── 63.dat │ │ │ ├── 64.dat │ │ │ ├── 65.dat │ │ │ ├── 66.dat │ │ │ ├── 67.dat │ │ │ ├── 68.dat │ │ │ ├── 69.dat │ │ │ ├── 7.dat │ │ │ ├── 70.dat │ │ │ ├── 71.dat │ │ │ ├── 72.dat │ │ │ ├── 73.dat │ │ │ ├── 74.dat │ │ │ ├── 75.dat │ │ │ ├── 76.dat │ │ │ ├── 77.dat │ │ │ ├── 78.dat │ │ │ ├── 79.dat │ │ │ ├── 8.dat │ │ │ ├── 80.dat │ │ │ ├── 81.dat │ │ │ ├── 82.dat │ │ │ ├── 83.dat │ │ │ ├── 84.dat │ │ │ ├── 85.dat │ │ │ ├── 86.dat │ │ │ ├── 87.dat │ │ │ ├── 88.dat │ │ │ ├── 89.dat │ │ │ ├── 9.dat │ │ │ ├── 90.dat │ │ │ ├── 91.dat │ │ │ ├── 92.dat │ │ │ ├── 93.dat │ │ │ ├── 94.dat │ │ │ ├── 95.dat │ │ │ ├── 96.dat │ │ │ ├── 97.dat │ │ │ ├── 98.dat │ │ │ └── 99.dat │ │ ├── strains │ │ │ ├── 0 │ │ │ ├── 1 │ │ │ ├── 2 │ │ │ ├── 3 │ │ │ ├── 4 │ │ │ ├── 5 │ │ │ ├── 6 │ │ │ ├── 7 │ │ │ ├── 8 │ │ │ ├── 9 │ │ │ ├── 10 │ │ │ ├── 11 │ │ │ ├── 12 │ │ │ ├── 13 │ │ │ ├── 14 │ │ │ ├── 15 │ │ │ ├── 16 │ │ │ ├── 17 │ │ │ ├── 18 │ │ │ ├── 19 │ │ │ ├── 20 │ │ │ ├── 21 │ │ │ ├── 22 │ │ │ ├── 23 │ │ │ ├── 24 │ │ │ ├── 25 │ │ │ ├── 26 │ │ │ ├── 27 │ │ │ ├── 28 │ │ │ ├── 29 │ │ │ ├── 30 │ │ │ ├── 31 │ │ │ ├── 32 │ │ │ ├── 33 │ │ │ ├── 34 │ │ │ ├── 35 │ │ │ ├── 36 │ │ │ ├── 37 │ │ │ ├── 38 │ │ │ ├── 39 │ │ │ ├── 40 │ │ │ ├── 41 │ │ │ ├── 42 │ │ │ ├── 43 │ │ │ ├── 44 │ │ │ ├── 45 │ │ │ ├── 46 │ │ │ ├── 47 │ │ │ ├── 48 │ │ │ ├── 49 │ │ │ ├── 50 │ │ │ ├── 51 │ │ │ ├── 52 │ │ │ ├── 53 │ │ │ ├── 54 │ │ │ ├── 55 │ │ │ ├── 56 │ │ │ ├── 57 │ │ │ ├── 58 │ │ │ ├── 59 │ │ │ ├── 60 │ │ │ ├── 61 │ │ │ ├── 62 │ │ │ ├── 63 │ │ │ ├── 64 │ │ │ ├── 65 │ │ │ ├── 66 │ │ │ ├── 67 │ │ │ ├── 68 │ │ │ ├── 69 │ │ │ ├── 70 │ │ │ ├── 71 │ │ │ ├── 72 │ │ │ ├── 73 │ │ │ ├── 74 │ │ │ ├── 75 │ │ │ ├── 76 │ │ │ ├── 77 │ │ │ ├── 78 │ │ │ ├── 79 │ │ │ ├── 80 │ │ │ ├── 81 │ │ │ ├── 82 │ │ │ ├── 83 │ │ │ ├── 84 │ │ │ ├── 85 │ │ │ ├── 86 │ │ │ ├── 87 │ │ │ ├── 88 │ │ │ ├── 89 │ │ │ ├── 90 │ │ │ ├── 91 │ │ │ ├── 92 │ │ │ ├── 93 │ │ │ ├── 94 │ │ │ ├── 95 │ │ │ ├── 96 │ │ │ ├── 97 │ │ │ ├── 98 │ │ │ ├── 99 │ │ │ ├── 100 │ │ │ ├── 101 │ │ │ ├── 102 │ │ │ ├── 103 │ │ │ ├── 104 │ │ │ ├── 105 │ │ │ ├── 106 │ │ │ ├── 107 │ │ │ ├── 108 │ │ │ ├── 109 │ │ │ ├── 110 │ │ │ ├── 111 │ │ │ ├── 112 │ │ │ ├── 113 │ │ │ ├── 114 │ │ │ ├── 115 │ │ │ ├── 116 │ │ │ ├── 117 │ │ │ ├── 118 │ │ │ ├── 119 │ │ │ ├── 120 │ │ │ ├── 121 │ │ │ ├── 122 │ │ │ ├── 123 │ │ │ ├── 124 │ │ │ ├── 125 │ │ │ ├── 126 │ │ │ ├── 127 │ │ │ ├── 128 │ │ │ ├── 129 │ │ │ ├── 130 │ │ │ ├── 131 │ │ │ ├── 132 │ │ │ ├── 133 │ │ │ ├── 134 │ │ │ ├── 135 │ │ │ ├── 136 │ │ │ ├── 137 │ │ │ ├── 138 │ │ │ ├── 139 │ │ │ ├── 140 │ │ │ ├── 141 │ │ │ ├── 142 │ │ │ ├── 143 │ │ │ ├── 144 │ │ │ ├── 145 │ │ │ ├── 146 │ │ │ ├── 147 │ │ │ ├── 148 │ │ │ ├── 149 │ │ │ ├── 150 │ │ │ ├── 151 │ │ │ ├── 152 │ │ │ ├── 153 │ │ │ ├── 154 │ │ │ ├── 155 │ │ │ ├── 156 │ │ │ ├── 157 │ │ │ ├── 158 │ │ │ ├── 159 │ │ │ ├── 160 │ │ │ ├── 161 │ │ │ ├── 162 │ │ │ ├── 163 │ │ │ ├── 164 │ │ │ ├── 165 │ │ │ ├── 166 │ │ │ ├── 167 │ │ │ ├── 168 │ │ │ ├── 169 │ │ │ ├── 170 │ │ │ ├── 171 │ │ │ ├── 172 │ │ │ ├── 173 │ │ │ ├── 174 │ │ │ ├── 175 │ │ │ ├── 176 │ │ │ ├── 177 │ │ │ ├── 178 │ │ │ ├── 179 │ │ │ ├── 180 │ │ │ ├── 181 │ │ │ ├── 182 │ │ │ ├── 183 │ │ │ ├── 184 │ │ │ ├── 185 │ │ │ ├── 186 │ │ │ ├── 187 │ │ │ ├── 188 │ │ │ ├── 189 │ │ │ ├── 190 │ │ │ ├── 191 │ │ │ ├── 192 │ │ │ ├── 193 │ │ │ ├── 194 │ │ │ ├── 195 │ │ │ ├── 196 │ │ │ ├── 197 │ │ │ ├── 198 │ │ │ ├── 199 │ │ │ └── 200 │ │ └── stresses │ │ │ ├── 0 │ │ │ ├── 1 │ │ │ ├── 2 │ │ │ ├── 3 │ │ │ ├── 4 │ │ │ ├── 5 │ │ │ ├── 6 │ │ │ ├── 7 │ │ │ ├── 8 │ │ │ ├── 9 │ │ │ ├── 10 │ │ │ ├── 11 │ │ │ ├── 12 │ │ │ ├── 13 │ │ │ ├── 14 │ │ │ ├── 15 │ │ │ ├── 16 │ │ │ ├── 17 │ │ │ ├── 18 │ │ │ ├── 19 │ │ │ ├── 20 │ │ │ ├── 21 │ │ │ ├── 22 │ │ │ ├── 23 │ │ │ ├── 24 │ │ │ ├── 25 │ │ │ ├── 26 │ │ │ ├── 27 │ │ │ ├── 28 │ │ │ ├── 29 │ │ │ ├── 30 │ │ │ ├── 31 │ │ │ ├── 32 │ │ │ ├── 33 │ │ │ ├── 34 │ │ │ ├── 35 │ │ │ ├── 36 │ │ │ ├── 37 │ │ │ ├── 38 │ │ │ ├── 39 │ │ │ ├── 40 │ │ │ ├── 41 │ │ │ ├── 42 │ │ │ ├── 43 │ │ │ ├── 44 │ │ │ ├── 45 │ │ │ ├── 46 │ │ │ ├── 47 │ │ │ ├── 48 │ │ │ ├── 49 │ │ │ ├── 50 │ │ │ ├── 51 │ │ │ ├── 52 │ │ │ ├── 53 │ │ │ ├── 54 │ │ │ ├── 55 │ │ │ ├── 56 │ │ │ ├── 57 │ │ │ ├── 58 │ │ │ ├── 59 │ │ │ ├── 60 │ │ │ ├── 61 │ │ │ ├── 62 │ │ │ ├── 63 │ │ │ ├── 64 │ │ │ ├── 65 │ │ │ ├── 66 │ │ │ ├── 67 │ │ │ ├── 68 │ │ │ ├── 69 │ │ │ ├── 70 │ │ │ ├── 71 │ │ │ ├── 72 │ │ │ ├── 73 │ │ │ ├── 74 │ │ │ ├── 75 │ │ │ ├── 76 │ │ │ ├── 77 │ │ │ ├── 78 │ │ │ ├── 79 │ │ │ ├── 80 │ │ │ ├── 81 │ │ │ ├── 82 │ │ │ ├── 83 │ │ │ ├── 84 │ │ │ ├── 85 │ │ │ ├── 86 │ │ │ ├── 87 │ │ │ ├── 88 │ │ │ ├── 89 │ │ │ ├── 90 │ │ │ ├── 91 │ │ │ ├── 92 │ │ │ ├── 93 │ │ │ ├── 94 │ │ │ ├── 95 │ │ │ ├── 96 │ │ │ ├── 97 │ │ │ ├── 98 │ │ │ ├── 99 │ │ │ ├── 100 │ │ │ ├── 101 │ │ │ ├── 102 │ │ │ ├── 103 │ │ │ ├── 104 │ │ │ ├── 105 │ │ │ ├── 106 │ │ │ ├── 107 │ │ │ ├── 108 │ │ │ ├── 109 │ │ │ ├── 110 │ │ │ ├── 111 │ │ │ ├── 112 │ │ │ ├── 113 │ │ │ ├── 114 │ │ │ ├── 115 │ │ │ ├── 116 │ │ │ ├── 117 │ │ │ ├── 118 │ │ │ ├── 119 │ │ │ ├── 120 │ │ │ ├── 121 │ │ │ ├── 122 │ │ │ ├── 123 │ │ │ ├── 124 │ │ │ ├── 125 │ │ │ ├── 126 │ │ │ ├── 127 │ │ │ ├── 128 │ │ │ ├── 129 │ │ │ ├── 130 │ │ │ ├── 131 │ │ │ ├── 132 │ │ │ ├── 133 │ │ │ ├── 134 │ │ │ ├── 135 │ │ │ ├── 136 │ │ │ ├── 137 │ │ │ ├── 138 │ │ │ ├── 139 │ │ │ ├── 140 │ │ │ ├── 141 │ │ │ ├── 142 │ │ │ ├── 143 │ │ │ ├── 144 │ │ │ ├── 145 │ │ │ ├── 146 │ │ │ ├── 147 │ │ │ ├── 148 │ │ │ ├── 149 │ │ │ ├── 150 │ │ │ ├── 151 │ │ │ ├── 152 │ │ │ ├── 153 │ │ │ ├── 154 │ │ │ ├── 155 │ │ │ ├── 156 │ │ │ ├── 157 │ │ │ ├── 158 │ │ │ ├── 159 │ │ │ ├── 160 │ │ │ ├── 161 │ │ │ ├── 162 │ │ │ ├── 163 │ │ │ ├── 164 │ │ │ ├── 165 │ │ │ ├── 166 │ │ │ ├── 167 │ │ │ ├── 168 │ │ │ ├── 169 │ │ │ ├── 170 │ │ │ ├── 171 │ │ │ ├── 172 │ │ │ ├── 173 │ │ │ ├── 174 │ │ │ ├── 175 │ │ │ ├── 176 │ │ │ ├── 177 │ │ │ ├── 178 │ │ │ ├── 179 │ │ │ ├── 180 │ │ │ ├── 181 │ │ │ ├── 182 │ │ │ ├── 183 │ │ │ ├── 184 │ │ │ ├── 185 │ │ │ ├── 186 │ │ │ ├── 187 │ │ │ ├── 188 │ │ │ ├── 189 │ │ │ ├── 190 │ │ │ ├── 191 │ │ │ ├── 192 │ │ │ ├── 193 │ │ │ ├── 194 │ │ │ ├── 195 │ │ │ ├── 196 │ │ │ ├── 197 │ │ │ ├── 198 │ │ │ ├── 199 │ │ │ └── 200 │ ├── parameters.txt │ ├── strains.txt │ ├── strains.xlsx │ └── stresses.txt ├── Purge_output ├── Purge_vtkmovie ├── output_vtk_python.py ├── testvtk.txt ├── testvtk.vtk └── vtk_generator.py ├── PreProcessing └── Triaxial.gid │ ├── Triaxial 2.dat │ ├── Triaxial 3.dat │ ├── Triaxial copy 2.dat │ ├── Triaxial copy 3.dat │ ├── Triaxial.cnd │ ├── Triaxial.dat │ ├── Triaxial.dat~ │ ├── Triaxial.geo │ ├── Triaxial.lin │ ├── Triaxial.mat │ ├── Triaxial.msh │ ├── Triaxial.png │ ├── Triaxial.prb │ ├── Triaxial.uni │ └── Triaxial.vv ├── README.md ├── figures ├── .DS_Store ├── MCC-DP-hybrid-1-01.png └── PostProcessing-FieldDisp2-small.png ├── libblas.a ├── liblapack.a ├── main.f90 ├── subroutines ├── FEM.f90 ├── FEM_BackUP ├── GaussJordan.f90 ├── GaussJordan2.f90 ├── conj_grad.f90 ├── control.f90 ├── geometry.f90 ├── input_bound_cond_GiD.f90 ├── input_data_GiD.f90 ├── input_examples.f90 ├── interface.f90 ├── numerical_analysis.f90 ├── output.f90 ├── output_deviator.f90 ├── output_python.f90 ├── output_vtk.f90 ├── plasticity.f90 ├── validation.f90 └── zonetest_sub.f90 ├── variables.mod └── workspace ├── Alloc.f90 ├── Alloc2.f90 ├── Alloc_CamClay.f90 └── Module.f90 /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viktorrobin/FEM/519c6811c065ae8d896444d976c00c9b7642b79b/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.out 2 | .DS_Store 3 | .f90~ 4 | -------------------------------------------------------------------------------- /Examples/1Q4_Axi.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . SECTION 7.9 . FIG 7.12 P.542 2 | 04 01 03 3 4 1 2 2 2 10 4 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 10 | 1 000.0 0.0 11 | 2 001.0 0.0 12 | 3 001.0 1.0 13 | 4 000.0 1.0 14 | 1 11 0.000000 0.000000 15 | 2 01 0.000000 0.000000 16 | 4 11 0.000000 0.000000 17 | 1 18 | 72000000.0 0.2 0.0 0.0 24.0 0.0 0.0 0.0 19 | INTERNAL PRESSURE 20 | 1 0 0 21 | 3 0.0 -1.0 22 | 0.1 1.0 30 0 0 23 | 0.1 1.0 30 0 0 24 | 0.1 1.0 30 0 0 25 | 0.1 1.0 30 0 0 26 | 0.1 1.0 30 0 0 27 | 0.1 1.0 30 0 0 28 | 0.1 1.0 30 0 0 29 | 0.1 1.0 30 0 0 30 | 0.1 1.0 30 0 0 31 | 0.1 1.0 30 3 3 -------------------------------------------------------------------------------- /Examples/1Q4_CamClay copy.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE 1 ELEMENT Q4 CAM CLAY 2 | 04 01 03 3 4 1 2 2 5 100 4 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 10 | 1 000.0 0.0 11 | 2 001.0 0.0 12 | 3 001.0 1.0 13 | 4 000.0 1.0 14 | 1 11 0.000000 0.000000 15 | 2 01 0.000000 0.000000 16 | 4 10 0.000000 0.000000 17 | 1 18 | 50000.0 0.2 0.0 0.0 170.0 0.0 30.0 1.602 0.075 0.005 1.13 19 | INTERNAL PRESSURE 20 | 0 0 1 21 | 2 22 | 1 2 3 23 | 300.0 0.0 300.0 0.0 24 | 1 3 4 25 | 300.0 0.0 300.0 0.0 26 | 27 | 1 0 0 28 | 3 0.0 -100.0 29 | 1.0 1.0 30 3 3 30 | 31 | 32 | 0.01 1.0 30 0 0 33 | 0.01 1.0 30 0 0 34 | 0.01 1.0 30 0 0 35 | 0.01 1.0 30 0 0 36 | 0.01 1.0 30 0 0 37 | 0.01 1.0 30 0 0 38 | 0.01 1.0 30 0 0 39 | 0.01 1.0 30 0 0 40 | 0.01 1.0 30 0 0 41 | 0.01 1.0 30 0 0 42 | 0.05 1.0 30 3 3 43 | 0.02 1.0 30 3 3 44 | 0.01 1.0 30 3 3 45 | 0.01 1.0 30 0 0 46 | 0.01 1.0 30 0 0 47 | 0.1 1.0 30 3 3 48 | 0.1 1.0 30 3 3 49 | 0.1 1.0 30 3 3 50 | 0.1 1.0 30 3 3 51 | 0.1 1.0 30 3 3 52 | 0.1 1.0 30 3 3 53 | 0.1 1.0 30 3 3 54 | 0.1 1.0 30 3 3 55 | -------------------------------------------------------------------------------- /Examples/1Q4_CamClay.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE 1 ELEMENT Q4 CAM CLAY 2 | 04 01 04 3 4 1 2 2 5 100 4 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 10 | 1 000.0 0.0 11 | 2 001.0 0.0 12 | 3 001.0 1.0 13 | 4 000.0 1.0 14 | 1 11 0.000000 0.000000 15 | 2 01 0.000000 0.000000 16 | 3 01 0.000000 -0.1 17 | 4 11 0.000000 -0.1 18 | 1 19 | 50000.0 0.2 0.0 0.0 170.0 0.0 30.0 1.602 0.075 0.005 1.13 20 | INTERNAL PRESSURE 21 | 0 0 1 22 | 2 23 | 1 2 3 24 | 300.0 0.0 300.0 0.0 25 | 1 3 4 26 | 300.0 0.0 300.0 0.0 27 | 28 | 1 0 0 29 | 3 0.0 -100.0 30 | 1.0 1.0 30 3 3 31 | 32 | 33 | 0.01 1.0 30 0 0 34 | 0.01 1.0 30 0 0 35 | 0.01 1.0 30 0 0 36 | 0.01 1.0 30 0 0 37 | 0.01 1.0 30 0 0 38 | 0.01 1.0 30 0 0 39 | 0.01 1.0 30 0 0 40 | 0.01 1.0 30 0 0 41 | 0.01 1.0 30 0 0 42 | 0.01 1.0 30 0 0 43 | 0.05 1.0 30 3 3 44 | 0.02 1.0 30 3 3 45 | 0.01 1.0 30 3 3 46 | 0.01 1.0 30 0 0 47 | 0.01 1.0 30 0 0 48 | 0.1 1.0 30 3 3 49 | 0.1 1.0 30 3 3 50 | 0.1 1.0 30 3 3 51 | 0.1 1.0 30 3 3 52 | 0.1 1.0 30 3 3 53 | 0.1 1.0 30 3 3 54 | 0.1 1.0 30 3 3 55 | 0.1 1.0 30 3 3 56 | -------------------------------------------------------------------------------- /Examples/1Q4_Plast.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . 1 ELEMENT Q4 PLASTICITE PARFAITE 2 | 04 01 03 2 4 1 2 2 2 1000 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 10 | 1 000.0 0.0 11 | 2 001.0 0.0 12 | 3 001.0 1.0 13 | 4 000.0 1.0 14 | 1 11 0.000000 0.000000 15 | 2 01 0.000000 0.000000 16 | 4 11 0.000000 0.000000 17 | 1 18 | 72000.0 0.3 0.0 0.0 24.0 0.0 0.0 0.0 19 | INTERNAL PRESSURE 20 | 1 0 0 21 | 3 0.0 -115.837 22 | 0.1 1.0 30 3 3 23 | 0.1 1.0 30 3 3 24 | 0.1 1.0 30 0 0 25 | 0.1 1.0 30 0 0 26 | 0.1 1.0 30 0 0 27 | 0.1 1.0 30 0 0 28 | 0.1 1.0 30 0 0 29 | 0.1 1.0 30 0 0 30 | 0.1 1.0 30 0 0 31 | 0.1 1.0 30 3 3 32 | 33 | 34 | 35 | 3 0.0 -1.0 36 | 1.0 1.0 30 3 3 37 | 0.6 1.0 30 3 3 38 | 0.1 1.0 30 0 0 39 | 0.1 1.0 30 0 0 40 | 0.1 1.0 30 0 0 41 | 0.1 1.0 30 0 0 42 | 0.1 1.0 30 0 0 43 | 0.1 1.0 30 0 0 44 | 0.1 1.0 30 0 0 45 | 0.1 1.0 30 3 3 46 | -------------------------------------------------------------------------------- /Examples/1Q4_Plast_DispImp.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . 1 ELEMENT Q4 PLASTICITE PARFAITE 2 | 04 01 04 2 4 1 2 2 2 10000 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 10 | 1 000.0 0.0 11 | 2 001.0 0.0 12 | 3 001.0 1.0 13 | 4 000.0 1.0 14 | 1 11 0.000000 0.000000 15 | 2 01 0.000000 0.000000 16 | 3 01 0.000000 -0.02 17 | 4 11 0.000000 0.000000 18 | 1 19 | 72000.0 0.3 0.0 0.0 24.0 0.0 0.0 0.0 20 | INTERNAL PRESSURE 21 | 0 0 0 22 | 0.1 1.0 30 3 3 23 | 0.1 1.0 30 3 3 24 | 0.1 1.0 30 0 0 25 | 0.1 1.0 30 0 0 26 | 0.1 1.0 30 0 0 27 | 0.1 1.0 30 0 0 28 | 0.1 1.0 30 0 0 29 | 0.1 1.0 30 0 0 30 | 0.1 1.0 30 0 0 31 | 0.1 1.0 30 3 3 32 | 33 | 34 | 35 | 3 0.0 -1.0 36 | 1.0 1.0 30 3 3 37 | 0.6 1.0 30 3 3 38 | 0.1 1.0 30 0 0 39 | 0.1 1.0 30 0 0 40 | 0.1 1.0 30 0 0 41 | 0.1 1.0 30 0 0 42 | 0.1 1.0 30 0 0 43 | 0.1 1.0 30 0 0 44 | 0.1 1.0 30 0 0 45 | 0.1 1.0 30 3 3 46 | -------------------------------------------------------------------------------- /Examples/1elemQ4_DispImp.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . SECTION 7.9 . FIG 7.12 P.542 2 | 04 01 04 1 4 1 3 2 2 1 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 10 | 1 000.0 0.0 11 | 2 001.0 0.0 12 | 3 001.0 1.0 13 | 4 000.0 1.0 14 | 1 11 0.000000 0.000000 15 | 2 01 0.000000 0.000000 16 | 3 01 0.000000 -1.00000 17 | 4 11 0.000000 0.000000 18 | 1 19 | 72000000.0 0.2 0.0 0.0 24.0 0.0 0.0 0.0 20 | INTERNAL PRESSURE 21 | 0 0 0 22 | 1.0 1.0 30 3 3 23 | -------------------------------------------------------------------------------- /Examples/1elemQ8.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . 1 ELEMENT Q8 2 | 08 01 05 2 8 1 3 2 2 1 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 5 6 7 8 10 | 1 000.0 0.0 11 | 2 000.5 0.0 12 | 3 001.0 0.0 13 | 4 001.0 0.5 14 | 5 001.0 1.0 15 | 6 000.5 1.0 16 | 7 000.0 1.0 17 | 8 000.0 0.5 18 | 1 11 0.000000 0.000000 19 | 2 11 0.000000 0.000000 20 | 3 11 0.000000 0.000000 21 | 7 11 0.000000 0.000000 22 | 8 11 0.000000 0.000000 23 | 1 24 | 21000.0 0. 0.0 0.0 24.0 0.0 0.0 0.0 25 | INTERNAL PRESSURE 26 | 1 0 0 27 | 5 -10.0 -10.0 28 | 1.0 1.0 30 3 3 29 | -------------------------------------------------------------------------------- /Examples/1elemQ8_Axis.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . 1 ELEMENT Q8 AXIS 2 | 08 01 05 3 8 1 3 2 2 1 4 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 5 6 7 8 10 | 1 000.0 0.0 11 | 2 000.5 0.0 12 | 3 001.0 0.0 13 | 4 001.0 0.5 14 | 5 001.0 1.0 15 | 6 000.5 1.0 16 | 7 000.0 1.0 17 | 8 000.0 0.5 18 | 1 11 0.000000 0.000000 19 | 2 01 0.000000 0.000000 20 | 3 01 0.000000 0.000000 21 | 7 11 0.000000 0.000000 22 | 8 11 0.000000 0.000000 23 | 1 24 | 72000000.0 0.2 0.0 0.0 24.0 0.0 0.0 0.0 25 | INTERNAL PRESSURE 26 | 1 0 0 27 | 5 0.0 -100.0 28 | 1.0 1.0 30 3 3 29 | -------------------------------------------------------------------------------- /Examples/2T3_DispImp.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTIC EXAMPLE EMAD 2 | 04 02 04 2 3 1 2 2 2 3 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 10 | 2 1 2 4 3 11 | 1 000.0 0.0 12 | 2 001.0 0.0 13 | 3 000.0 1.0 14 | 4 001.0 1.0 15 | 1 11 0.000000 0.000000 16 | 2 01 0.000000 0.000000 17 | 3 11 0.000000 0.000000 18 | 4 01 0.000000 -0.01000 19 | 1 20 | 00072.0 0.2 0.0 0.0 24.0 0.0 0.0 0.0 21 | INTERNAL PRESSURE 22 | 0 0 0 23 | 0.33 1.0 30 3 3 24 | 0.33 1.0 30 3 3 25 | 0.34 1.0 30 3 3 26 | -------------------------------------------------------------------------------- /Examples/2elemQ8.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . 2 ELEMENT Q8 2 | 08 01 05 1 8 1 3 2 2 1 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 5 6 7 8 10 | 1 000.0 0.0 11 | 2 000.5 0.0 12 | 3 001.0 0.0 13 | 4 001.0 0.5 14 | 5 001.0 1.0 15 | 6 000.5 1.0 16 | 7 000.0 1.0 17 | 8 000.0 0.5 18 | 1 11 0.000000 0.000000 19 | 2 01 0.000000 0.000000 20 | 3 01 0.000000 0.000000 21 | 7 11 0.000000 0.000000 22 | 8 11 0.000000 0.000000 23 | 1 24 | 72000000.0 0.2 0.0 0.0 24.0 0.0 0.0 0.0 25 | INTERNAL PRESSURE 26 | 1 0 0 27 | 5 0.0 -100.0 28 | 1.0 1.0 30 3 3 29 | 30 | A FAIRE!!!!! -------------------------------------------------------------------------------- /Examples/4Q4_Plast.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . 4 ELEMENT Q4 PLASTICITE PARFAITE 2 | 09 04 05 3 4 1 2 2 2 100 4 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 5 9 8 10 | 2 1 5 2 6 9 11 | 3 1 9 6 3 7 12 | 4 1 8 9 7 4 13 | 1 000.0 0.0 14 | 2 00400.0 0.0 15 | 3 00400.0 400.0 16 | 4 000.0 400.0 17 | 5 00200.0 0.0 18 | 6 00400.0 200.0 19 | 7 00200.0 400.0 20 | 8 000.0 200.0 21 | 9 00200.0 200.0 22 | 1 11 0.000000 0.000000 23 | 2 01 0.000000 0.000000 24 | 4 10 0.000000 0.000000 25 | 5 01 0.000000 0.000000 26 | 8 10 0.000000 0.000000 27 | 1 28 | 21000.0 0.3 0.0 0.0 15.0 10.0 0.0 0.0 29 | INTERNAL PRESSURE 30 | 0 0 1 31 | 2 32 | 3 3 7 33 | 16.0 0.0 16.0 0.0 34 | 4 7 4 35 | 16.0 0.0 16.0 0.0 36 | 0.1 1.0 30 3 3 37 | 0.1 1.0 30 3 3 38 | 0.1 1.0 30 0 0 39 | 0.1 1.0 30 0 0 40 | 0.1 1.0 30 0 0 41 | 0.1 1.0 30 0 0 42 | 0.1 1.0 30 0 0 43 | 0.1 1.0 30 0 0 44 | 0.1 1.0 30 0 0 45 | 0.1 1.0 30 3 3 46 | 47 | 48 | 49 | 3 0.0 -1.0 50 | 1.0 1.0 30 3 3 51 | 0.6 1.0 30 3 3 52 | 0.1 1.0 30 0 0 53 | 0.1 1.0 30 0 0 54 | 0.1 1.0 30 0 0 55 | 0.1 1.0 30 0 0 56 | 0.1 1.0 30 0 0 57 | 0.1 1.0 30 0 0 58 | 0.1 1.0 30 0 0 59 | 0.1 1.0 30 3 3 60 | -------------------------------------------------------------------------------- /Examples/4Q4_Plast_PrescDisp.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . 4 ELEMENT Q4 PLASTICITE PARFAITE 2 | 09 04 07 3 4 1 2 2 2 1000 4 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 5 9 8 10 | 2 1 5 2 6 9 11 | 3 1 9 6 3 7 12 | 4 1 8 9 7 4 13 | 1 000.0 0.0 14 | 2 00400.0 0.0 15 | 3 00400.0 400.0 16 | 4 000.0 400.0 17 | 5 00200.0 0.0 18 | 6 00400.0 200.0 19 | 7 00200.0 400.0 20 | 8 000.0 200.0 21 | 9 00200.0 200.0 22 | 1 11 0.000000 0.000000 23 | 2 01 0.000000 0.000000 24 | 3 01 0.000000 -0.403048E+02 25 | 4 11 0.000000 -0.403048E+02 26 | 5 01 0.000000 0.000000 27 | 7 01 0.000000 -0.403048E+02 28 | 8 10 0.000000 0.000000 29 | 1 30 | 21000.0 0.3 0.0 0.0 14.0 10.0 0.0 0.0 31 | INTERNAL PRESSURE 32 | 0 0 0 33 | 2 34 | 3 3 7 35 | 20.0 0.0 20.0 0.0 36 | 4 7 4 37 | 20.0 0.0 20.0 0.0 38 | 0.1 1.0 30 3 3 39 | 0.1 1.0 30 3 3 40 | 0.1 1.0 30 0 0 41 | 0.1 1.0 30 0 0 42 | 0.1 1.0 30 0 0 43 | 0.1 1.0 30 0 0 44 | 0.1 1.0 30 0 0 45 | 0.1 1.0 30 0 0 46 | 0.1 1.0 30 0 0 47 | 0.1 1.0 30 3 3 48 | 49 | 50 | 51 | 3 0.0 -1.0 52 | 1.0 1.0 30 3 3 53 | 0.6 1.0 30 3 3 54 | 0.1 1.0 30 0 0 55 | 0.1 1.0 30 0 0 56 | 0.1 1.0 30 0 0 57 | 0.1 1.0 30 0 0 58 | 0.1 1.0 30 0 0 59 | 0.1 1.0 30 0 0 60 | 0.1 1.0 30 0 0 61 | 0.1 1.0 30 3 3 62 | -------------------------------------------------------------------------------- /Examples/4elemQ8.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . 4 ELEMENTS Q8 2 | 21 04 09 1 8 1 3 2 2 300 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 5 6 7 8 10 | 2 1 3 9 10 11 12 13 5 4 11 | 3 1 5 13 12 14 15 16 17 18 12 | 4 1 7 6 5 18 17 19 20 21 13 | 1 000.0 0.0 14 | 2 001.0 0.0 15 | 3 002.0 0.0 16 | 4 002.0 1.0 17 | 5 002.0 2.0 18 | 6 001.0 2.0 19 | 7 000.0 2.0 20 | 8 000.0 1.0 21 | 9 003.0 0.0 22 | 10 004.0 0.0 23 | 11 004.0 1.0 24 | 12 004.0 2.0 25 | 13 003.0 2.0 26 | 14 004.0 3.0 27 | 15 004.0 4.0 28 | 16 003.0 4.0 29 | 17 002.0 4.0 30 | 18 002.0 3.0 31 | 19 001.0 4.0 32 | 20 000.0 4.0 33 | 21 000.0 3.0 34 | 1 11 0.000000 0.000000 35 | 2 01 0.000000 0.000000 36 | 3 01 0.000000 0.000000 37 | 7 11 0.000000 0.000000 38 | 8 11 0.000000 0.000000 39 | 9 01 0.000000 0.000000 40 | 10 01 0.000000 0.000000 41 | 20 11 0.000000 0.000000 42 | 21 11 0.000000 0.000000 43 | 1 44 | 72000.0 0.3 0.0 0.0 24.0 0.0 0.0 0.0 45 | INTERNAL PRESSURE 46 | 1 0 0 47 | 15 0.0 -20.0 48 | 1.0 1.0 30 3 3 49 | -------------------------------------------------------------------------------- /Examples/4elemQ8_DispImp.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . 4 ELEMENTS Q8 2 | 21 04 13 1 8 1 3 2 2 500 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 5 6 7 8 10 | 2 1 3 9 10 11 12 13 5 4 11 | 3 1 5 13 12 14 15 16 17 18 12 | 4 1 7 6 5 18 17 19 20 21 13 | 1 000.0 0.0 14 | 2 001.0 0.0 15 | 3 002.0 0.0 16 | 4 002.0 1.0 17 | 5 002.0 2.0 18 | 6 001.0 2.0 19 | 7 000.0 2.0 20 | 8 000.0 1.0 21 | 9 003.0 0.0 22 | 10 004.0 0.0 23 | 11 004.0 1.0 24 | 12 004.0 2.0 25 | 13 003.0 2.0 26 | 14 004.0 3.0 27 | 15 004.0 4.0 28 | 16 003.0 4.0 29 | 17 002.0 4.0 30 | 18 002.0 3.0 31 | 19 001.0 4.0 32 | 20 000.0 4.0 33 | 21 000.0 3.0 34 | 1 11 0.000000 0.000000 35 | 2 01 0.000000 0.000000 36 | 3 01 0.000000 0.000000 37 | 7 11 0.000000 0.000000 38 | 8 11 0.000000 0.000000 39 | 9 01 0.000000 0.000000 40 | 10 01 0.000000 0.000000 41 | 15 01 0.00000 -0.0319604 42 | 16 01 0.00000 -0.0319604 43 | 17 01 0.00000 -0.0319604 44 | 19 01 0.00000 -0.0319604 45 | 20 11 0.000000 -0.0319604 46 | 21 11 0.000000 0.000000 47 | 1 48 | 72000.0 0.2 0.0 0.0 24.0 0.0 0.0 0.0 49 | INTERNAL PRESSURE 50 | 0 0 0 51 | -------------------------------------------------------------------------------- /Examples/4elemQ8_DistLoading.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . 4 ELEMENTS Q8 2 | 21 04 09 2 8 1 3 2 2 10 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 5 6 7 8 10 | 2 1 3 9 10 11 12 13 5 4 11 | 3 1 5 13 12 14 15 16 17 18 12 | 4 1 7 6 5 18 17 19 20 21 13 | 1 000.0 0.0 14 | 2 001.0 0.0 15 | 3 002.0 0.0 16 | 4 002.0 1.0 17 | 5 002.0 2.0 18 | 6 001.0 2.0 19 | 7 000.0 2.0 20 | 8 000.0 1.0 21 | 9 003.0 0.0 22 | 10 004.0 0.0 23 | 11 004.0 1.0 24 | 12 004.0 2.0 25 | 13 003.0 2.0 26 | 14 004.0 3.0 27 | 15 004.0 4.0 28 | 16 003.0 4.0 29 | 17 002.0 4.0 30 | 18 002.0 3.0 31 | 19 001.0 4.0 32 | 20 000.0 4.0 33 | 21 000.0 3.0 34 | 1 11 0.000000 0.000000 35 | 2 01 0.000000 0.000000 36 | 3 01 0.000000 0.000000 37 | 7 11 0.000000 0.000000 38 | 8 11 0.000000 0.000000 39 | 9 01 0.000000 0.000000 40 | 10 01 0.000000 0.000000 41 | 20 11 0.000000 0.000000 42 | 21 11 0.000000 0.000000 43 | 1 44 | 72000.0 0.2 0.0 0.0 24.0 0.0 0.0 0.0 45 | INTERNAL PRESSURE 46 | 0 0 1 47 | 2 48 | 2 10 11 12 49 | 25.0 0.0 25.0 0.0 25.0 0.0 50 | 3 12 14 15 51 | 25.0 0.0 25.0 0.0 25.0 0.0 52 | 0.5 1.0 30 3 3 53 | 0.5 1.0 30 3 3 54 | 55 | -------------------------------------------------------------------------------- /Examples/4elemQ8_DistLoading_Axisym.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . 4 ELEMENTS Q8 en Axysymetrie 2 | 21 04 09 3 8 1 3 2 2 2 4 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 5 6 7 8 10 | 2 1 3 9 10 11 12 13 5 4 11 | 3 1 5 13 12 14 15 16 17 18 12 | 4 1 7 6 5 18 17 19 20 21 13 | 1 000.0 0.0 14 | 2 001.0 0.0 15 | 3 002.0 0.0 16 | 4 002.0 1.0 17 | 5 002.0 2.0 18 | 6 001.0 2.0 19 | 7 000.0 2.0 20 | 8 000.0 1.0 21 | 9 003.0 0.0 22 | 10 004.0 0.0 23 | 11 004.0 1.0 24 | 12 004.0 2.0 25 | 13 003.0 2.0 26 | 14 004.0 3.0 27 | 15 004.0 4.0 28 | 16 003.0 4.0 29 | 17 002.0 4.0 30 | 18 002.0 3.0 31 | 19 001.0 4.0 32 | 20 000.0 4.0 33 | 21 000.0 3.0 34 | 1 11 0.000000 0.000000 35 | 2 01 0.000000 0.000000 36 | 3 01 0.000000 0.000000 37 | 7 11 0.000000 0.000000 38 | 8 11 0.000000 0.000000 39 | 9 01 0.000000 0.000000 40 | 10 01 0.000000 0.000000 41 | 20 11 0.000000 0.000000 42 | 21 11 0.000000 0.000000 43 | 1 44 | 72000000.0 0.2 0.0 0.0 24.0 0.0 0.0 0.0 45 | INTERNAL PRESSURE 46 | 0 0 1 47 | 2 48 | 2 10 11 12 49 | 10.0 0.0 10.0 0.0 10.0 0.0 50 | 3 12 14 15 51 | 100.0 0.0 10.0 0.0 10.0 0.0 52 | 0.5 1.0 30 3 3 53 | 0.5 1.0 30 3 3 54 | -------------------------------------------------------------------------------- /Examples/E1Q4_Axi.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viktorrobin/FEM/519c6811c065ae8d896444d976c00c9b7642b79b/Examples/E1Q4_Axi.txt -------------------------------------------------------------------------------- /Examples/Example_2D_p542.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . SECTION 7.9 . FIG 7.12 P.542 2 | 51 12 18 2 8 1 3 2 2 10 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 8 12 13 14 9 3 2 10 | 2 1 3 9 14 15 16 10 5 4 11 | 3 1 5 10 16 17 18 11 7 6 12 | 4 1 12 19 23 24 25 20 14 13 13 | 5 1 14 20 25 26 27 21 16 15 14 | 6 1 16 21 27 28 29 22 18 17 15 | 7 1 23 30 34 35 36 31 25 24 16 | 8 1 25 31 36 37 38 32 27 26 17 | 9 1 27 32 38 39 40 33 29 28 18 | 10 1 34 41 45 46 47 42 36 35 19 | 11 1 36 42 47 48 49 43 38 37 20 | 12 1 38 43 49 50 51 44 40 39 21 | 1 100.0 0.0 22 | 2 96.592 25.882 23 | 3 86.602 50.0 24 | 4 70.710 70.710 25 | 5 50.0 86.602 26 | 6 25.882 96.592 27 | 7 0.0 100.0 28 | 8 110.0 0.0 29 | 9 95.263 55.0 30 | 10 55.0 95.263 31 | 11 0.0 110.0 32 | 12 120.0 0.0 33 | 13 115.911 31.058 34 | 14 103.923 60.0 35 | 15 84.853 84.853 36 | 16 60.0 103.923 37 | 17 31.058 115.911 38 | 18 0.0 120.0 39 | 19 130.0 0.0 40 | 20 112.583 65.0 41 | 21 65.0 112.583 42 | 22 0.0 130.0 43 | 23 140.0 0.0 44 | 24 135.230 36.234 45 | 25 121.243 70.0 46 | 26 98.995 98.995 47 | 27 70.0 121.243 48 | 28 36.234 135.230 49 | 29 0.0 140.0 50 | 30 155.0 0.0 51 | 31 134.234 77.5 52 | 32 77.5 134.234 53 | 33 0.0 155.0 54 | 34 170.0 0.0 55 | 35 164.207 43.999 56 | 36 147.224 85.0 57 | 37 120.208 120.208 58 | 38 85.0 147.224 59 | 39 43.999 164.207 60 | 40 0.0 170.0 61 | 41 185.0 0.0 62 | 42 160.215 92.5 63 | 43 92.5 160.215 64 | 44 0.0 185.0 65 | 45 200.0 0.0 66 | 46 193.185 51.764 67 | 47 173.205 100.0 68 | 48 141.421 141.421 69 | 49 100.0 173.205 70 | 50 51.764 193.185 71 | 51 0.0 200.0 72 | 1 01 0.000000 0.000000 73 | 7 10 0.000000 0.000000 74 | 8 01 0.000000 0.000000 75 | 11 10 0.000000 0.000000 76 | 12 01 0.000000 0.000000 77 | 18 10 0.000000 0.000000 78 | 19 01 0.000000 0.000000 79 | 22 10 0.000000 0.000000 80 | 23 01 0.000000 0.000000 81 | 29 10 0.000000 0.000000 82 | 30 01 0.000000 0.000000 83 | 33 10 0.000000 0.000000 84 | 34 01 0.000000 0.000000 85 | 40 10 0.000000 0.000000 86 | 41 01 0.000000 0.000000 87 | 44 10 0.000000 0.000000 88 | 45 01 0.000000 0.000000 89 | 51 10 0.000000 0.000000 90 | 1 91 | 21000.0 0.3 0.0 0.0 24.0 0.0 0.0 0.0 92 | INTERNAL PRESSURE 93 | 0 0 1 94 | 3 95 | 1 3 2 1 96 | 14.0 0.0 14.0 0.0 14.0 0.0 97 | 2 5 4 3 98 | 14.0 0.0 14.0 0.0 14.0 0.0 99 | 3 7 6 5 100 | 14.0 0.0 14.0 0.0 14.0 0.0 101 | 0.7 1.0 30 3 3 102 | 0.1 1.0 30 0 0 103 | 0.1 1.0 30 0 0 104 | 0.1 1.0 30 0 0 105 | 0.1 1.0 30 0 0 106 | 0.1 1.0 30 0 0 107 | 0.1 1.0 30 0 0 108 | 0.1 1.0 30 0 0 109 | 0.1 1.0 30 0 0 110 | 0.1 1.0 30 3 3 111 | 112 | 2.0 0.0 2.0 0.0 2.0 0.0 113 | 2 5 4 3 114 | 2.0 0.0 2.0 0.0 2.0 0.0 115 | 3 7 6 5 116 | 2.0 0.0 2.0 0.0 2.0 0.0 117 | 0.7 1.0 30 3 3 118 | 119 | 120 | -------------------------------------------------------------------------------- /Examples/Example_2D_p542_Original.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . SECTION 7.9 . FIG 7.12 P.542 2 | 51 12 18 2 8 1 2 2 2 1 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 8 12 13 14 9 3 2 10 | 2 1 3 9 14 15 16 10 5 4 11 | 3 1 5 10 16 17 18 11 7 6 12 | 4 1 12 19 23 24 25 20 14 13 13 | 5 1 14 20 25 26 27 21 16 15 14 | 6 1 16 21 27 28 29 22 18 17 15 | 7 1 23 30 34 35 36 31 25 24 16 | 8 1 25 31 36 37 38 32 27 26 17 | 9 1 27 32 38 39 40 33 29 28 18 | 10 1 34 41 45 46 47 42 36 35 19 | 11 1 36 42 47 48 49 43 38 37 20 | 12 1 38 43 49 50 51 44 40 39 21 | 1 100.0 0.0 27 70.0 121.243 22 | 2 96.592 25.882 28 36.234 135.230 23 | 3 86.602 50.5 29 0.0 140.0 24 | 4 70.710 70.710 30 155.0 0.0 25 | 5 50.0 86.602 31 134.234 7.5 26 | 6 25.882 96.592 32 77.5 134.234 27 | 7 0.0 100.0 33 0.0 155.0 28 | 8 110.0 0.0 34 170.0 0.0 29 | 9 95.263 55.0 35 164.207 43.999 30 | 10 55.0 95.263 36 147.224 85.0 31 | 11 0.0 110.0 37 120.208 120.208 32 | 12 120.0 0.0 38 85.0 147.224 33 | 13 115.911 31.058 39 43.999 146.207 34 | 14 103.923 60.0 40 0.0 170.0 35 | 15 84.853 84.853 41 185.0 0.0 36 | 16 60.0 103.923 42 160.215 92.5 37 | 17 31.058 115.911 43 92.5 160.215 38 | 18 0.0 120.0 44 0.0 185.0 39 | 19 130.0 0.0 45 200.0 0.0 40 | 20 112.583 65.0 46 193.185 51.764 41 | 21 65.0 112.583 47 173.205 100.0 42 | 22 0.0 130.0 48 141.421 141.421 43 | 23 140.0 0.0 49 100.0 173.205 44 | 24 135.230 36.234 50 51.764 193.185 45 | 25 121.243 70.0 51 0.0 200.0 46 | 26 98.995 98.995 47 | 1 01 0.0 0.0 48 | 7 10 0.0 0.0 49 | 8 01 0.0 0.0 50 | 11 10 0.0 0.0 51 | 12 01 0.0 0.0 52 | 18 10 0.0 0.0 53 | 19 01 0.0 0.0 54 | 22 10 0.0 0.0 55 | 23 01 0.0 0.0 56 | 29 10 0.0 0.0 57 | 30 01 0.0 0.0 58 | 33 10 0.0 0.0 59 | 34 01 0.0 0.0 60 | 40 10 0.0 0.0 61 | 41 01 0.0 0.0 62 | 44 10 0.0 0.0 63 | 45 01 0.0 0.0 64 | 51 10 0.0 0.0 65 | 1 66 | 21000.0 0.3 0.0 0.0 24.0 0.0 0.0 0.0 67 | 1 0 0 0 0 0 68 | 2 0 0 0 0 0 69 | 3 0 0 0 0 0 70 | 4 0 0 0 0 0 71 | 5 0 0 0 0 0 72 | 6 0 0 0 0 0 73 | 7 0 0 0 0 0 74 | 8 0 0 0 0 0 75 | INTERNAL PRESSURE 76 | 0 0 1 77 | 3 78 | 1 3 2 1 79 | 20.0 0.0 20.0 0.0 20.0 0.0 80 | 2 5 4 3 81 | 20.0 0.0 20.0 0.0 20.0 0.0 82 | 3 7 6 5 83 | 20.0 0.0 20.0 0.0 20.0 0.0 84 | 0.7 1.0 30 3 3 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /Examples/Example_2D_p542_ext.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . SECTION 7.9 . FIG 7.12 P.542 2 | 51 12 18 2 8 1 3 2 2 10 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 8 12 13 14 9 3 2 10 | 2 1 3 9 14 15 16 10 5 4 11 | 3 1 5 10 16 17 18 11 7 6 12 | 4 1 12 19 23 24 25 20 14 13 13 | 5 1 14 20 25 26 27 21 16 15 14 | 6 1 16 21 27 28 29 22 18 17 15 | 7 1 23 30 34 35 36 31 25 24 16 | 8 1 25 31 36 37 38 32 27 26 17 | 9 1 27 32 38 39 40 33 29 28 18 | 10 1 34 41 45 46 47 42 36 35 19 | 11 1 36 42 47 48 49 43 38 37 20 | 12 1 38 43 49 50 51 44 40 39 21 | 1 100.0 0.0 22 | 2 96.592 25.882 23 | 3 86.602 50.0 24 | 4 70.710 70.710 25 | 5 50.0 86.602 26 | 6 25.882 96.592 27 | 7 0.0 100.0 28 | 8 110.0 0.0 29 | 9 95.263 55.0 30 | 10 55.0 95.263 31 | 11 0.0 110.0 32 | 12 120.0 0.0 33 | 13 115.911 31.058 34 | 14 103.923 60.0 35 | 15 84.853 84.853 36 | 16 60.0 103.923 37 | 17 31.058 115.911 38 | 18 0.0 120.0 39 | 19 130.0 0.0 40 | 20 112.583 65.0 41 | 21 65.0 112.583 42 | 22 0.0 130.0 43 | 23 140.0 0.0 44 | 24 135.230 36.234 45 | 25 121.243 70.0 46 | 26 98.995 98.995 47 | 27 70.0 121.243 48 | 28 36.234 135.230 49 | 29 0.0 140.0 50 | 30 155.0 0.0 51 | 31 134.234 77.5 52 | 32 77.5 134.234 53 | 33 0.0 155.0 54 | 34 170.0 0.0 55 | 35 164.207 43.999 56 | 36 147.224 85.0 57 | 37 120.208 120.208 58 | 38 85.0 147.224 59 | 39 43.999 164.207 60 | 40 0.0 170.0 61 | 41 185.0 0.0 62 | 42 160.215 92.5 63 | 43 92.5 160.215 64 | 44 0.0 185.0 65 | 45 200.0 0.0 66 | 46 193.185 51.764 67 | 47 173.205 100.0 68 | 48 141.421 141.421 69 | 49 100.0 173.205 70 | 50 51.764 193.185 71 | 51 0.0 200.0 72 | 1 01 0.000000 0.000000 73 | 7 10 0.000000 0.000000 74 | 8 01 0.000000 0.000000 75 | 11 10 0.000000 0.000000 76 | 12 01 0.000000 0.000000 77 | 18 10 0.000000 0.000000 78 | 19 01 0.000000 0.000000 79 | 22 10 0.000000 0.000000 80 | 23 01 0.000000 0.000000 81 | 29 10 0.000000 0.000000 82 | 30 01 0.000000 0.000000 83 | 33 10 0.000000 0.000000 84 | 34 01 0.000000 0.000000 85 | 40 10 0.000000 0.000000 86 | 41 01 0.000000 0.000000 87 | 44 10 0.000000 0.000000 88 | 45 01 0.000000 0.000000 89 | 51 10 0.000000 0.000000 90 | 1 91 | 21000.0 0.3 0.0 0.0 24.0 0.0 0.0 0.0 92 | INTERNAL PRESSURE 93 | 0 0 1 94 | 3 95 | 1 3 2 1 96 | -14.0 0.0 -14.0 0.0 -14.0 0.0 97 | 2 5 4 3 98 | -14.0 0.0 -14.0 0.0 -14.0 0.0 99 | 3 7 6 5 100 | -14.0 0.0 -14.0 0.0 -14.0 0.0 101 | 0.7 1.0 30 3 3 102 | 0.1 1.0 30 0 0 103 | 0.1 1.0 30 0 0 104 | 0.1 1.0 30 0 0 105 | 0.1 1.0 30 0 0 106 | 0.1 1.0 30 0 0 107 | 0.1 1.0 30 0 0 108 | 0.1 1.0 30 0 0 109 | 0.1 1.0 30 0 0 110 | 0.1 1.0 30 3 3 111 | 112 | 2.0 0.0 2.0 0.0 2.0 0.0 113 | 2 5 4 3 114 | 2.0 0.0 2.0 0.0 2.0 0.0 115 | 3 7 6 5 116 | 2.0 0.0 2.0 0.0 2.0 0.0 117 | 0.7 1.0 30 3 3 118 | 119 | 120 | -------------------------------------------------------------------------------- /Examples/Example_one_elem_4d.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . 1 ELEMENT Q4 2 | 04 01 03 2 4 1 2 2 2 1 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 10 | 1 000.0 0.0 11 | 2 001.0 0.0 12 | 3 001.0 1.0 13 | 4 000.0 1.0 14 | 1 11 0.000000 0.000000 15 | 2 01 0.000000 0.000000 16 | 4 11 0.000000 0.000000 17 | 1 18 | 21000.0 0.2 0.0 0.0 24.0 0.0 0.0 0.0 19 | INTERNAL PRESSURE 20 | 1 0 0 21 | 3 0.0 -1.0 22 | 1.0 1.0 30 3 3 23 | -------------------------------------------------------------------------------- /Examples/Example_two_elem.4d.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE . SECTION 7.9 . FIG 7.12 P.542 2 | 06 02 04 2 4 1 3 2 2 1 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 10 | 2 1 2 5 6 3 11 | 1 000.0 0.0 12 | 2 001.0 0.0 13 | 3 001.0 1.0 14 | 4 000.0 1.0 15 | 5 002.0 0.0 16 | 6 002.0 1.0 17 | 1 11 0.000000 0.000000 18 | 2 01 0.000000 0.000000 19 | 4 11 0.000000 0.000000 20 | 5 01 0.000000 0.000000 21 | 1 22 | 72000000.0 0.2 0.0 0.0 24.0 0.0 0.0 0.0 23 | INTERNAL PRESSURE 24 | 1 0 0 25 | 6 0.0 -100.0 26 | 1.0 1.0 10 3 3 27 | 28 | 29 | -------------------------------------------------------------------------------- /Examples/Example_two_elem.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTIC EXAMPLE EMAD 2 | 04 02 03 2 3 1 2 2 2 3 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 10 | 2 1 2 4 3 11 | 1 000.0 0.0 12 | 2 001.0 0.0 13 | 3 000.0 1.0 14 | 4 001.0 1.0 15 | 1 11 0.000000 0.000000 16 | 2 01 0.000000 0.000000 17 | 3 11 0.000000 0.000000 18 | 1 19 | 00072.0 0.2 0.0 0.0 24.0 0.0 0.0 0.0 20 | INTERNAL PRESSURE 21 | 1 0 0 22 | 4 0.0 -1.0 23 | 0.33 1.0 30 3 3 24 | 0.33 1.0 30 3 3 25 | 0.34 1.0 30 3 3 26 | -------------------------------------------------------------------------------- /Examples/Example_two_elem_dispImp.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTIC EXAMPLE EMAD 2 | 04 02 04 2 3 1 2 2 2 3 3 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 10 | 2 1 2 4 3 11 | 1 000.0 0.0 12 | 2 001.0 0.0 13 | 3 000.0 1.0 14 | 4 001.0 1.0 15 | 1 11 0.000000 0.000000 16 | 2 01 0.000000 0.000000 17 | 3 11 0.000000 0.000000 18 | 4 01 0.000000 0.0118143 19 | 1 20 | 00072.0 0.2 0.0 0.0 24.0 0.0 0.0 0.0 21 | INTERNAL PRESSURE 22 | 0 0 0 23 | 0.33 1.0 30 3 3 24 | 0.33 1.0 30 3 3 25 | 0.34 1.0 30 3 3 26 | 27 | -------------------------------------------------------------------------------- /Examples/LimeTreatedSoils.txt: -------------------------------------------------------------------------------- 1 | 2-D ELASTO-PLASTIC EXAMPLE 1 ELEMENT Q4 CAM CLAY LIME TREATED SOILS 2 | 04 01 03 3 4 1 2 2 6 3500 4 3 | 4 0.9794 0.2950 1.288 1 1 1 1 4 | 3 5 | 2 1 100 10000 10 6 | 1 1 100 10000 10 7 | 1 1 100 10000 10 8 | 1 1 100 10000 10 9 | 1 1 1 2 3 4 10 | 1 000.0 0.0 11 | 2 001.0 0.0 12 | 3 001.0 1.0 13 | 4 000.0 1.0 14 | 1 11 0.000000 0.000000 15 | 2 01 0.000000 0.000000 16 | 4 10 0.000000 0.000000 17 | 1 18 | 45000.0 0.2 0.0 0.0 170.0 0.0 30.0 1.99 0.08 0.032 1.15 400.0 0.035 0.065 0.046 -41.8 19 | INTERNAL PRESSURE 20 | 0 0 1 21 | 2 22 | 1 2 3 23 | 600.0 0.0 600.0 0.0 24 | 1 3 4 25 | 600.0 0.0 600.0 0.0 26 | 27 | 1 0 0 28 | 3 0.0 -100.0 29 | 1.0 1.0 30 3 3 30 | 31 | 32 | 0.01 1.0 30 0 0 33 | 0.01 1.0 30 0 0 34 | 0.01 1.0 30 0 0 35 | 0.01 1.0 30 0 0 36 | 0.01 1.0 30 0 0 37 | 0.01 1.0 30 0 0 38 | 0.01 1.0 30 0 0 39 | 0.01 1.0 30 0 0 40 | 0.01 1.0 30 0 0 41 | 0.01 1.0 30 0 0 42 | 0.05 1.0 30 3 3 43 | 0.02 1.0 30 3 3 44 | 0.01 1.0 30 3 3 45 | 0.01 1.0 30 0 0 46 | 0.01 1.0 30 0 0 47 | 0.1 1.0 30 3 3 48 | 0.1 1.0 30 3 3 49 | 0.1 1.0 30 3 3 50 | 0.1 1.0 30 3 3 51 | 0.1 1.0 30 3 3 52 | 0.1 1.0 30 3 3 53 | 0.1 1.0 30 3 3 54 | 0.1 1.0 30 3 3 55 | -------------------------------------------------------------------------------- /Examples/Oudin_Exemple_plast.nb: -------------------------------------------------------------------------------- 1 | (* Content-type: application/vnd.wolfram.mathematica *) 2 | 3 | (*** Wolfram Notebook File ***) 4 | (* http://www.wolfram.com/nb *) 5 | 6 | (* CreatedBy='Mathematica 8.0' *) 7 | 8 | (*CacheID: 234*) 9 | (* Internal cache information: 10 | NotebookFileLineBreakTest 11 | NotebookFileLineBreakTest 12 | NotebookDataPosition[ 157, 7] 13 | NotebookDataLength[ 6965, 257] 14 | NotebookOptionsPosition[ 5800, 210] 15 | NotebookOutlinePosition[ 6157, 226] 16 | CellTagsIndexPosition[ 6114, 223] 17 | WindowFrame->Normal*) 18 | 19 | (* Beginning of Notebook Content *) 20 | Notebook[{ 21 | 22 | Cell[CellGroupData[{ 23 | Cell[BoxData[{ 24 | RowBox[{ 25 | RowBox[{"B", "=", 26 | RowBox[{"{", 27 | RowBox[{"0", ",", 28 | RowBox[{ 29 | RowBox[{"-", "1.9"}], "*", "\[Sigma]", "*", "S"}]}], "}"}]}], 30 | ";"}], "\[IndentingNewLine]", 31 | RowBox[{ 32 | RowBox[{"A", "=", 33 | RowBox[{ 34 | RowBox[{"(", 35 | RowBox[{"Ee", "*", 36 | RowBox[{"S", "/", "h"}]}], ")"}], "*", 37 | RowBox[{"{", 38 | RowBox[{ 39 | RowBox[{"{", 40 | RowBox[{ 41 | RowBox[{"1", "/", 42 | RowBox[{"Sqrt", "[", "2", "]"}]}], ",", "0"}], "}"}], ",", 43 | RowBox[{"{", 44 | RowBox[{"0", ",", 45 | RowBox[{"1", "+", 46 | RowBox[{"1", "/", 47 | RowBox[{"Sqrt", "[", "2", "]"}]}]}]}], "}"}]}], "}"}]}]}], 48 | ";"}], "\[IndentingNewLine]", 49 | RowBox[{"MatrixForm", "[", "B", "]"}]}], "Input", 50 | CellChangeTimes->{{3.57976259165917*^9, 3.579762732671659*^9}, { 51 | 3.579762815881371*^9, 3.579762819888269*^9}, {3.5797628537338257`*^9, 52 | 3.579762864428011*^9}, {3.579762929821948*^9, 3.579762932083448*^9}}], 53 | 54 | Cell[BoxData[ 55 | TagBox[ 56 | RowBox[{"(", "\[NoBreak]", 57 | TagBox[GridBox[{ 58 | {"0"}, 59 | { 60 | RowBox[{ 61 | RowBox[{"-", "1.9`"}], " ", "S", " ", "\[Sigma]"}]} 62 | }, 63 | GridBoxAlignment->{ 64 | "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, 65 | "RowsIndexed" -> {}}, 66 | GridBoxSpacings->{"Columns" -> { 67 | Offset[0.27999999999999997`], { 68 | Offset[0.5599999999999999]}, 69 | Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { 70 | Offset[0.2], { 71 | Offset[0.4]}, 72 | Offset[0.2]}, "RowsIndexed" -> {}}], 73 | Column], "\[NoBreak]", ")"}], 74 | Function[BoxForm`e$, 75 | MatrixForm[BoxForm`e$]]]], "Output", 76 | CellChangeTimes->{{3.579762725566903*^9, 3.57976273322862*^9}, 77 | 3.579762817281817*^9, {3.579762855093053*^9, 3.5797628647758913`*^9}, 78 | 3.579762932904929*^9}] 79 | }, Open ]], 80 | 81 | Cell[CellGroupData[{ 82 | 83 | Cell[BoxData[ 84 | RowBox[{"LinearSolve", "[", 85 | RowBox[{"A", ",", "B"}], "]"}]], "Input", 86 | CellChangeTimes->{{3.57976287611169*^9, 3.579762881322028*^9}}], 87 | 88 | Cell[BoxData[ 89 | RowBox[{"{", 90 | RowBox[{"0.`", ",", 91 | RowBox[{"-", 92 | FractionBox[ 93 | RowBox[{"1.1129942314911194`", " ", "h", " ", "\[Sigma]"}], "Ee"]}]}], 94 | "}"}]], "Output", 95 | CellChangeTimes->{3.5797628822973948`*^9, 3.579762934336816*^9}] 96 | }, Open ]], 97 | 98 | Cell[CellGroupData[{ 99 | 100 | Cell[BoxData[ 101 | RowBox[{"B", "=", 102 | RowBox[{"-", 103 | RowBox[{"{", 104 | RowBox[{"0", ",", 105 | RowBox[{"0.0967", "*", "\[Sigma]", "*", "S"}]}], "}"}]}]}]], "Input", 106 | CellChangeTimes->{{3.579762982250825*^9, 3.579762998071175*^9}}], 107 | 108 | Cell[BoxData[ 109 | RowBox[{"{", 110 | RowBox[{"0", ",", 111 | RowBox[{ 112 | RowBox[{"-", "0.0967`"}], " ", "S", " ", "\[Sigma]"}]}], "}"}]], "Output",\ 113 | 114 | CellChangeTimes->{3.579763002099893*^9}] 115 | }, Open ]], 116 | 117 | Cell[CellGroupData[{ 118 | 119 | Cell[BoxData[ 120 | RowBox[{"LinearSolve", "[", 121 | RowBox[{"A", ",", "B"}], "]"}]], "Input"], 122 | 123 | Cell[BoxData[ 124 | RowBox[{"{", 125 | RowBox[{"0.`", ",", 126 | RowBox[{"-", 127 | FractionBox[ 128 | RowBox[{"0.05664554851852171`", " ", "h", " ", "\[Sigma]"}], "Ee"]}]}], 129 | "}"}]], "Output", 130 | CellChangeTimes->{3.5797630105297127`*^9}] 131 | }, Open ]], 132 | 133 | Cell[BoxData[""], "Input", 134 | CellChangeTimes->{{3.579763435588161*^9, 3.579763436978356*^9}}], 135 | 136 | Cell[CellGroupData[{ 137 | 138 | Cell[BoxData[ 139 | RowBox[{"1.803", "+", "0.0967"}]], "Input", 140 | CellChangeTimes->{{3.579763489941498*^9, 3.579763504328773*^9}}], 141 | 142 | Cell[BoxData["1.8997`"], "Output", 143 | CellChangeTimes->{3.5797635047652683`*^9}] 144 | }, Open ]], 145 | 146 | Cell[CellGroupData[{ 147 | 148 | Cell[BoxData[ 149 | RowBox[{"1.113", "+", 150 | RowBox[{"2", "*", 151 | RowBox[{"0.56", "/", 152 | RowBox[{"Sqrt", "[", "2", "]"}]}]}]}]], "Input", 153 | CellChangeTimes->{{3.5797636347767143`*^9, 3.579763658740831*^9}}], 154 | 155 | Cell[BoxData["1.904959594928933`"], "Output", 156 | CellChangeTimes->{3.5797636597669783`*^9}] 157 | }, Open ]], 158 | 159 | Cell[CellGroupData[{ 160 | 161 | Cell[BoxData[ 162 | RowBox[{"1.1129942314911194", "+", "0.05664554851852171"}]], "Input", 163 | CellChangeTimes->{{3.5797640623044653`*^9, 3.579764068718923*^9}}], 164 | 165 | Cell[BoxData["1.1696397800096412`"], "Output", 166 | CellChangeTimes->{3.579764069913422*^9}] 167 | }, Open ]], 168 | 169 | Cell[BoxData[{ 170 | RowBox[{ 171 | RowBox[{"A", "=", 172 | RowBox[{"{", 173 | RowBox[{ 174 | RowBox[{"{", 175 | RowBox[{"110", ",", 176 | RowBox[{"-", "30"}], ",", 177 | RowBox[{"-", "30"}]}], "}"}], ",", 178 | RowBox[{"{", 179 | RowBox[{ 180 | RowBox[{"-", "30"}], ",", "110", ",", "50"}], "}"}], ",", 181 | RowBox[{"{", 182 | RowBox[{ 183 | RowBox[{"-", "30"}], ",", "50", ",", "110"}], "}"}]}], "}"}]}], 184 | ";"}], "\[IndentingNewLine]", 185 | RowBox[{ 186 | RowBox[{ 187 | RowBox[{"B", "=", 188 | RowBox[{"{", 189 | RowBox[{"0", ",", "0", ",", "0.7"}], "}"}]}], ";"}], 190 | "\[IndentingNewLine]"}], "\[IndentingNewLine]", 191 | RowBox[{ 192 | RowBox[{"MatrixForm", "[", "B", "]"}], 193 | ";"}], "\[IndentingNewLine]"}], "Input", 194 | CellChangeTimes->{{3.579848678009409*^9, 3.579848755864863*^9}}], 195 | 196 | Cell[CellGroupData[{ 197 | 198 | Cell[BoxData[ 199 | RowBox[{"LinearSolve", "[", 200 | RowBox[{"A", ",", "B"}], "]"}]], "Input", 201 | CellChangeTimes->{{3.5798487589068947`*^9, 3.5798487630235853`*^9}}], 202 | 203 | Cell[BoxData[ 204 | RowBox[{"{", 205 | RowBox[{"0.001329113924050633`", ",", 206 | RowBox[{"-", "0.00339662447257384`"}], ",", "0.008270042194092827`"}], 207 | "}"}]], "Output", 208 | CellChangeTimes->{3.5798487643004227`*^9}] 209 | }, Open ]] 210 | }, 211 | WindowSize->{740, 665}, 212 | WindowMargins->{{Automatic, -14}, {Automatic, 4}}, 213 | FrontEndVersion->"8.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (November 13, \ 214 | 2010)", 215 | StyleDefinitions->"Default.nb" 216 | ] 217 | (* End of Notebook Content *) 218 | 219 | (* Internal cache information *) 220 | (*CellTagsOutline 221 | CellTagsIndex->{} 222 | *) 223 | (*CellTagsIndex 224 | CellTagsIndex->{} 225 | *) 226 | (*NotebookFileOutline 227 | Notebook[{ 228 | Cell[CellGroupData[{ 229 | Cell[579, 22, 963, 29, 58, "Input"], 230 | Cell[1545, 53, 864, 24, 57, "Output"] 231 | }, Open ]], 232 | Cell[CellGroupData[{ 233 | Cell[2446, 82, 152, 3, 27, "Input"], 234 | Cell[2601, 87, 248, 7, 46, "Output"] 235 | }, Open ]], 236 | Cell[CellGroupData[{ 237 | Cell[2886, 99, 230, 6, 27, "Input"], 238 | Cell[3119, 107, 184, 6, 27, "Output"] 239 | }, Open ]], 240 | Cell[CellGroupData[{ 241 | Cell[3340, 118, 87, 2, 27, "Input"], 242 | Cell[3430, 122, 227, 7, 46, "Output"] 243 | }, Open ]], 244 | Cell[3672, 132, 92, 1, 27, "Input"], 245 | Cell[CellGroupData[{ 246 | Cell[3789, 137, 124, 2, 27, "Input"], 247 | Cell[3916, 141, 78, 1, 27, "Output"] 248 | }, Open ]], 249 | Cell[CellGroupData[{ 250 | Cell[4031, 147, 204, 5, 27, "Input"], 251 | Cell[4238, 154, 89, 1, 27, "Output"] 252 | }, Open ]], 253 | Cell[CellGroupData[{ 254 | Cell[4364, 160, 152, 2, 27, "Input"], 255 | Cell[4519, 164, 88, 1, 27, "Output"] 256 | }, Open ]], 257 | Cell[4622, 168, 769, 25, 88, "Input"], 258 | Cell[CellGroupData[{ 259 | Cell[5416, 197, 157, 3, 27, "Input"], 260 | Cell[5576, 202, 208, 5, 27, "Output"] 261 | }, Open ]] 262 | } 263 | ] 264 | *) 265 | 266 | (* End of internal cache information *) 267 | 268 | -------------------------------------------------------------------------------- /PostProcessing/.idea/.name: -------------------------------------------------------------------------------- 1 | Postprocessing -------------------------------------------------------------------------------- /PostProcessing/.idea/Postprocessing.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /PostProcessing/.idea/dictionaries/viktor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /PostProcessing/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /PostProcessing/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /PostProcessing/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /PostProcessing/.idea/other.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /PostProcessing/.idea/scopes/scope_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /PostProcessing/.idea/testrunner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /PostProcessing/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /PostProcessing/Output/Deviatoric/deviatoric (Victors-MacBook-Pro's conflicted copy 2014-04-07 (1)).txt: -------------------------------------------------------------------------------- 1 | Increment eps_a varj2 sqrt(varj2) 2 | 1 -9.9999999999999308E-003 149.99999999999855 12.247448713915832 3 | 2 -1.9999999999999862E-002 599.99999999999420 24.494897427831663 4 | 3 -2.9999999999999798E-002 1349.9999999999870 36.742346141747497 5 | 4 -3.9999999999999723E-002 2399.9999999999768 48.989794855663327 6 | 5 -4.9999999999999656E-002 3749.9999999999636 61.237243569579157 7 | 6 -5.9999999999999581E-002 5399.9999999999472 73.484692283494979 8 | 7 -6.9999999999999507E-002 7349.9999999999291 85.732140997410824 9 | 8 -7.9999999999999447E-002 9599.9999999999072 97.979589711326653 10 | 9 -8.9999999999999372E-002 12149.999999999884 110.22703842524248 11 | 10 -9.9999999999999312E-002 14999.999999999856 122.47448713915831 12 | 11 -0.10999999999999925 18149.999999999825 134.72193585307414 13 | 12 -0.11999999999999919 21599.999999999789 146.96938456698996 14 | 13 -0.12999999999999912 25349.999999999760 159.21683328090583 15 | 14 -0.13999999999999907 29399.999999999716 171.46428199482165 16 | 15 -0.14999999999999900 33749.999999999680 183.71173070873749 17 | 16 -0.15999999999999895 38399.999999999636 195.95917942265331 18 | 17 -0.16999999999999887 43349.999999999585 208.20662813656915 19 | 18 -0.17999999999999883 48599.999999999534 220.45407685048497 20 | 19 -0.18999999999999875 54149.999999999483 232.70152556440081 21 | 20 -0.19999999999999871 59999.999999999425 244.94897427831663 22 | Increment eps_a varj2 sqrt(varj2) 23 | 1 -0.15513634465478943 73445.481618326361 271.00826854235714 24 | 2 -0.11029331772825482 90376.395595761875 300.62667146439600 25 | 3 -6.6368746383553348E-002 110348.80981936486 332.18791341553180 26 | 4 -2.7339685940885938E-002 111124.79804822624 333.35386310679860 27 | 5 1.3202542857143775E-002 112654.20184679986 335.63998845012475 28 | 6 5.5055367980555450E-002 114015.86534179471 337.66235404882599 29 | 7 9.7934606902069316E-002 115220.13328013312 339.44091279651769 30 | 8 0.14164561402961576 116330.99700095711 341.07330150710584 31 | 9 0.18607320221709156 117386.27779915513 342.61680898513305 32 | 10 0.23113753645903931 118395.77354010775 344.08686917711310 33 | 11 0.27677417591753967 119355.34665047504 345.47843152717223 34 | 12 0.32294249921421592 120257.77855550167 346.78203320746258 35 | 13 0.36963061717574286 121089.83823419451 347.97965204045266 36 | 14 0.41688465368335093 121850.69223788117 349.07118505812133 37 | 15 0.46476882051798041 122548.08574436135 350.06868718061793 38 | 16 0.51335775397659167 123186.58612804030 350.97946681827460 39 | 17 0.56276182802879005 123740.47952119749 351.76764990714747 40 | 18 0.61321737430702683 124335.09847080079 352.61182406550233 41 | 19 0.66477929699855520 124942.17767842392 353.47160802308287 42 | 20 0.71744619629560080 125571.35257589196 354.36048393675605 43 | 21 0.77121989917048628 126210.48699135413 355.26115322584053 44 | 22 0.82609656737163917 126847.18904048711 356.15613014587734 45 | 23 0.88205392974541241 127491.55423040396 357.05959478832654 46 | 24 0.93911490072938997 128138.03705853003 357.96373707196938 47 | 25 0.99728212058789589 128763.19117481982 358.83588334337441 48 | 26 1.0565831415185754 129380.32396618098 359.69476499690813 49 | 27 1.1171034186281770 130021.23558909382 360.58457480748370 50 | 28 1.1788579565048649 130683.96818250483 361.50237645485100 51 | 29 1.2418244690708595 131360.36712597113 362.43670775181027 52 | 30 1.3059760537365632 132036.98519812294 363.36893813054928 53 | 31 1.3713230797890943 132697.03321062992 364.27603985251341 54 | 32 1.4379235192275810 133368.60499112683 365.19666618293058 55 | 33 1.5057655221224182 134064.56370769851 366.14828103884156 56 | 34 1.5748521299750029 134750.73720156890 367.08410099263205 57 | 35 1.6451865032798445 135444.19153345429 368.02743312619276 58 | 36 1.7168065655119202 136147.48902962563 368.98169199788981 59 | 37 1.7897219275964988 136859.47378749002 369.94523079435692 60 | 38 1.8639562314778617 137589.18699685441 370.93016458203340 61 | 39 1.9393743874743736 138300.03929061428 371.88713246173802 62 | 40 2.0161249850865226 139028.25050332199 372.86492259707398 63 | 41 2.0941589826460101 139742.18347175233 373.82105809030116 64 | 42 2.1734192155357821 140471.16730570764 374.79483361661704 65 | 43 2.2540556948961328 141215.33068760269 375.78628326164687 66 | 44 2.3360698297923252 142005.08111325320 376.83561550529322 67 | 45 2.4199874099277063 142861.52906311498 377.97027536979016 68 | 46 2.5043764625869014 143749.39947690061 379.14298025533930 69 | 47 2.5899335615896386 144480.66145584607 380.10611867720053 70 | 48 2.6767161465248144 145192.87600523280 381.04182973163563 71 | 49 2.7646296508680455 145980.40866760505 382.07382620065073 72 | 50 2.8539039964601347 146741.05877925220 383.06795582409683 73 | 51 2.9443515320480675 147491.29828328863 384.04595855611944 74 | 52 3.0360808115383211 148267.57928309473 385.05529379959802 75 | 53 3.1290355006390138 149050.29161921295 386.07031952639528 76 | 54 3.2229033077295126 149706.73063837198 386.91954026434485 77 | 55 3.3180247720319653 150455.90453396598 387.88645830186698 78 | 56 3.4143171415082691 151185.64792057048 388.82598668372265 79 | 57 3.5118025248880453 151964.72357056741 389.82653010097636 80 | 58 3.6104491423884557 152749.94220371591 390.83237097727192 81 | 59 3.7102207350264718 153532.89014216186 391.83273235165268 82 | 60 3.8111170794618747 154322.47571596137 392.83899464788544 83 | 61 3.9131274442621837 155117.19542032547 393.84920390972667 84 | 62 4.0162330768501855 155914.44732297858 394.86003510481862 85 | 63 4.1204151613141571 156712.42209449245 395.86919821387016 86 | 64 4.2256574722689813 157511.09031436295 396.87666889647591 87 | 65 4.3319414917900572 158308.39920987320 397.87988037832878 88 | 66 4.4392506503994582 159105.64026323534 398.88048368306431 89 | 67 4.5475660907706574 159902.36222949775 399.87793416178613 90 | 68 4.6568686160707760 160697.07982884030 400.87040278479066 91 | 69 4.7671413375958860 161490.46907470399 401.85876757227032 92 | 70 4.8783646345083600 162281.32914433925 402.84156829247308 93 | 71 4.9905249549638935 163071.30308682320 403.82087995400042 94 | 72 5.1036019849853771 163861.08612768669 404.79758661297217 95 | 73 5.2175777938388883 164648.17233590025 405.76861921038233 96 | 74 5.3324327069199633 165431.96627108002 406.73328640655910 97 | 75 5.4481484600410477 166212.00882832980 407.69107033185043 98 | 76 5.5647077105996567 166989.87161859471 408.64394234907570 99 | 77 5.6820948859521438 167763.50123402299 409.58943008093235 100 | 78 5.8002918216469173 168532.84487151922 410.52752023648696 101 | 79 5.9192765122438278 169298.25245562574 411.45868863790656 102 | 80 6.0390359738514983 170059.36154560494 412.38254272653802 103 | 81 6.1595522374587146 170818.02944629866 413.30137847132647 104 | 82 6.2808276742566935 171563.35173537361 414.20206630987923 105 | 83 6.4028313823157736 172304.07107607409 415.09525542467247 106 | 84 6.5255381491976294 173037.04566543415 415.97721772404094 107 | 85 6.6489297374456839 173762.49759980055 416.84829086827324 108 | 86 6.7729859874445353 174480.51296630228 417.70864602770945 109 | 87 6.8976904022804177 175191.17475088392 418.55844842851269 110 | 88 7.0230245689568500 175894.47635538279 419.39775435185965 111 | 89 7.1489690279985005 176590.07046272254 420.22621344071638 112 | 90 7.2755075853304634 177278.21223522138 421.04419273423235 113 | 91 7.4026228715356801 177958.78466636967 421.85161451198650 114 | 92 7.5302276068660374 178642.44819014423 422.66115055697304 115 | 93 7.6583875732075075 179313.04362104993 423.45370894709367 116 | 94 7.7870953047580391 179970.61866211356 424.22944106003951 117 | 95 7.9162125557534466 180605.08928181845 424.97657498010221 118 | 96 8.0458536165895325 181236.51243673186 425.71881851373666 119 | 97 8.1759533740576380 181865.65700284528 426.45709866626123 120 | 98 8.3065223862678295 182482.33146978234 427.17950731487849 121 | 99 8.4378684784770215 183135.90243843544 427.94380757108223 122 | 100 8.5696387529916773 183764.04976175603 428.67709264871621 123 | -------------------------------------------------------------------------------- /PostProcessing/Output/Deviatoric/deviatoric (Victors-MacBook-Pro's conflicted copy 2014-04-07).txt: -------------------------------------------------------------------------------- 1 | Increment eps_a varj2 sqrt(varj2) 2 | 1 -5.0000000000000669E-003 37.500000000000831 6.1237243569580135 3 | 2 -1.0000000000000134E-002 150.00000000000333 12.247448713916027 4 | 3 -1.5000000000000202E-002 337.50000000000745 18.371173070874040 5 | 4 -2.0000000000000268E-002 600.00000000001330 24.494897427832054 6 | 5 -2.5000000000000338E-002 937.50000000002092 30.618621784790069 7 | 6 -3.0000000000000405E-002 1350.0000000000300 36.742346141748079 8 | 7 -3.5000000000000468E-002 1837.5000000000409 42.866070498706094 9 | 8 -4.0000000000000535E-002 2400.0000000000532 48.989794855664108 10 | 9 -4.5000000000000609E-002 3037.5000000000673 55.113519212622116 11 | 10 -5.0000000000000676E-002 3750.0000000000828 61.237243569580130 12 | 11 -5.5000000000000743E-002 4537.5000000001000 67.360967926538137 13 | 12 -6.0000000000000810E-002 5400.0000000001191 73.484692283496159 14 | 13 -6.5000000000000877E-002 6337.5000000001392 79.608416640454166 15 | 14 -7.0000000000000936E-002 7350.0000000001619 85.732140997412174 16 | 15 -7.5000000000001010E-002 8437.5000000001837 91.855865354370181 17 | 16 -8.0000000000001070E-002 9600.0000000002092 97.979589711328188 18 | 17 -8.5000000000001144E-002 10837.500000000235 104.10331406828620 19 | 18 -9.0000000000001218E-002 12150.000000000264 110.22703842524422 20 | 19 -9.5000000000001278E-002 13537.500000000293 116.35076278220222 21 | 20 -0.10000000000000135 15000.000000000324 122.47448713916023 22 | Increment eps_a varj2 sqrt(varj2) 23 | 1 7.2617956783692192E-002 13712.534368926024 117.10053103605476 24 | 2 0.29314787994810065 26053.682601347075 161.41153181029873 25 | 3 0.50038970456605469 23129.006271410926 152.08223522624505 26 | 4 0.72558354321536334 28582.379475148315 169.06324105241896 27 | 5 0.96430269835497184 33094.288077480451 181.91835552653959 28 | 6 1.2158425780405979 38710.510750347174 196.74986848876716 29 | 7 1.4726168103709245 39224.364479487078 198.05141877675877 30 | 8 1.7414302806094124 39116.553189242426 197.77905144186133 31 | 9 2.0206056800478613 38827.086088604054 197.04589843131487 32 | 10 2.3134517146346902 38440.921613550548 196.06356523727337 33 | 11 2.6202827438828078 38056.175517062249 195.07992084543773 34 | 12 2.9415045488360181 37593.267587318041 193.88983363579959 35 | 13 3.2784580369896843 37213.491870191363 192.90798809326523 36 | 14 3.6324361713517987 37005.439756620821 192.36798007106282 37 | 15 4.0051115956835108 36970.561803705903 192.27730444258341 38 | 16 4.3983118300935073 37191.146345945752 192.85006182510222 39 | 17 4.8136290683874252 37716.044796352886 194.20619144701047 40 | 18 5.2505339022876507 38242.862528451151 195.55782400213792 41 | 19 5.7074065687140330 38799.412186055466 196.97566394368485 42 | 20 6.1831801849613965 39309.898006381001 198.26723886305825 43 | -------------------------------------------------------------------------------- /PostProcessing/Output/Deviatoric/deviatoric.txt: -------------------------------------------------------------------------------- 1 | Increment eps_a varj2 sqrt(varj2) 2 | -------------------------------------------------------------------------------- /PostProcessing/Output/conntable.txt: -------------------------------------------------------------------------------- 1 | 1 316 301 283 280 279 300 314 315 2 | 2 318 302 285 284 283 301 316 317 3 | 3 321 305 288 287 285 302 318 320 4 | 4 325 307 292 289 288 305 321 323 5 | 5 328 309 295 293 292 307 325 326 6 | 6 331 313 299 297 295 309 328 330 7 | 7 334 322 306 303 299 313 331 333 8 | 8 337 329 310 308 306 322 334 335 9 | 9 339 332 319 312 310 329 337 338 10 | 10 341 336 327 324 319 332 339 340 11 | 11 283 267 248 247 246 266 279 280 12 | 12 285 269 250 249 248 267 283 284 13 | 13 288 271 254 253 250 269 285 287 14 | 14 292 273 258 255 254 271 288 289 15 | 15 295 277 262 260 258 273 292 293 16 | 16 299 281 268 264 262 277 295 297 17 | 17 306 291 274 272 268 281 299 303 18 | 18 310 296 278 276 274 291 306 308 19 | 19 319 304 290 286 278 296 310 312 20 | 20 327 311 298 294 290 304 319 324 21 | 21 248 232 213 212 211 231 246 247 22 | 22 250 234 215 214 213 232 248 249 23 | 23 254 237 220 219 215 234 250 253 24 | 24 258 240 224 223 220 237 254 255 25 | 25 262 244 229 226 224 240 258 260 26 | 26 268 252 235 233 229 244 262 264 27 | 27 274 259 242 239 235 252 268 272 28 | 28 278 265 251 245 242 259 274 276 29 | 29 290 275 261 256 251 265 278 286 30 | 30 298 282 270 263 261 275 290 294 31 | 31 213 197 176 174 173 194 211 212 32 | 32 215 199 180 179 176 197 213 214 33 | 33 220 201 184 183 180 199 215 219 34 | 34 224 205 189 186 184 201 220 223 35 | 35 229 210 195 193 189 205 224 226 36 | 36 235 221 202 200 195 210 229 233 37 | 37 242 227 209 207 202 221 235 239 38 | 38 251 236 222 217 209 227 242 245 39 | 39 261 243 230 225 222 236 251 256 40 | 40 270 257 241 238 230 243 261 263 41 | 41 176 158 135 134 132 157 173 174 42 | 42 180 159 139 137 135 158 176 179 43 | 43 184 166 147 142 139 159 180 183 44 | 44 189 171 151 148 147 166 184 186 45 | 45 195 178 161 155 151 171 189 193 46 | 46 202 188 169 167 161 178 195 200 47 | 47 209 196 181 172 169 188 202 207 48 | 48 222 206 192 187 181 196 209 217 49 | 49 230 218 203 198 192 206 222 225 50 | 50 241 228 216 208 203 218 230 238 51 | 51 135 112 91 87 85 109 132 134 52 | 52 139 114 95 93 91 112 135 137 53 | 53 147 122 101 96 95 114 139 142 54 | 54 151 127 108 104 101 122 147 148 55 | 55 161 140 120 113 108 127 151 155 56 | 56 169 153 133 125 120 140 161 167 57 | 57 181 164 150 143 133 153 169 172 58 | 58 192 175 163 156 150 164 181 187 59 | 59 203 190 177 170 163 175 192 198 60 | 60 216 204 191 185 177 190 203 208 61 | 61 91 71 54 53 51 68 85 87 62 | 62 95 75 57 56 54 71 91 93 63 | 63 101 79 64 62 57 75 95 96 64 | 64 108 89 73 67 64 79 101 104 65 | 65 120 102 84 77 73 89 108 113 66 | 66 133 115 97 92 84 102 120 125 67 | 67 150 129 117 106 97 115 133 143 68 | 68 163 149 130 124 117 129 150 156 69 | 69 177 165 154 145 130 149 163 170 70 | 70 191 182 168 162 154 165 177 185 71 | 71 54 41 28 26 23 37 51 53 72 | 72 57 44 32 30 28 41 54 56 73 | 73 64 48 39 34 32 44 57 62 74 | 74 73 60 46 42 39 48 64 67 75 | 75 84 72 59 52 46 60 73 77 76 | 76 97 83 74 66 59 72 84 92 77 | 77 117 103 90 81 74 83 97 106 78 | 78 130 119 107 98 90 103 117 124 79 | 79 154 141 128 118 107 119 130 145 80 | 80 168 160 152 144 128 141 154 162 81 | 81 28 17 11 9 7 15 23 26 82 | 82 32 21 14 12 11 17 28 30 83 | 83 39 29 22 19 14 21 32 34 84 | 84 46 38 31 25 22 29 39 42 85 | 85 59 47 43 35 31 38 46 52 86 | 86 74 63 58 49 43 47 59 66 87 | 87 90 80 76 65 58 63 74 81 88 | 88 107 100 94 82 76 80 90 98 89 | 89 128 121 116 105 94 100 107 118 90 | 90 152 146 138 126 116 121 128 144 91 | 91 11 5 4 2 1 3 7 9 92 | 92 14 10 8 6 4 5 11 12 93 | 93 22 18 16 13 8 10 14 19 94 | 94 31 27 24 20 16 18 22 25 95 | 95 43 40 36 33 24 27 31 35 96 | 96 58 55 50 45 36 40 43 49 97 | 97 76 70 69 61 50 55 58 65 98 | 98 94 88 86 78 69 70 76 82 99 | 99 116 111 110 99 86 88 94 105 100 | 100 138 136 131 123 110 111 116 126 101 | -------------------------------------------------------------------------------- /PostProcessing/Output/parameters.txt: -------------------------------------------------------------------------------- 1 | 100 8 341 200 3 5 2 | -------------------------------------------------------------------------------- /PostProcessing/Output/strains.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viktorrobin/FEM/519c6811c065ae8d896444d976c00c9b7642b79b/PostProcessing/Output/strains.xlsx -------------------------------------------------------------------------------- /PostProcessing/Purge_output: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # http://forums.macrumors.com/showthread.php?t=475143 4 | # chmod 755 Run 5 | 6 | #Concatenate the three files 7 | #cd $f 8 | 9 | #cd PostProcessing/Output/output_increm 10 | 11 | #echo "The script you are running has basename `basename $0`, dirname `dirname $0`" 12 | #echo "The present working directory is `pwd`" 13 | 14 | cd "`dirname $0`" 15 | cd Output/output_increm 16 | rm -rfv displacements/* plastic_strains/* reactions/* specific_volume/* strains/* stresses/* 17 | 18 | #Erase useless files 19 | exit 0 -------------------------------------------------------------------------------- /PostProcessing/Purge_vtkmovie: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # http://forums.macrumors.com/showthread.php?t=475143 4 | # chmod 755 Run 5 | 6 | #Concatenate the three files 7 | #cd $f 8 | 9 | #cd PostProcessing/Output/output_increm 10 | 11 | #echo "The script you are running has basename `basename $0`, dirname `dirname $0`" 12 | #echo "The present working directory is `pwd`" 13 | 14 | cd "`dirname $0`" 15 | rm -rfv vtkmovie/* 16 | 17 | #Erase useless files 18 | exit 0 -------------------------------------------------------------------------------- /PostProcessing/output_vtk_python.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | import os 3 | import platform 4 | import numpy as np 5 | import random 6 | import shutil 7 | 8 | #http://dunne.uni-hd.de/VisuSimple/documents/vtkfileformat.html 9 | #http://people.sc.fsu.edu/~jburkardt/data/vtk/vtk.html 10 | 11 | syst = platform.system() 12 | base=os.path.dirname(os.path.abspath(__file__)) 13 | 14 | 15 | ## Import parameters 16 | File=base+'/Output/parameters.txt' 17 | data=np.loadtxt(File,skiprows=0) 18 | 19 | nelem=int(data[0]) 20 | nnode=int(data[1]) 21 | npoint=int(data[2]) 22 | nincs=int(data[3])+1 23 | ntype=int(data[4]) 24 | ncrit=int(data[5]) 25 | 26 | #num_files=print(len([name for name in os.listdir('.') if os.path.isfile("/vtkmovie")])) 27 | #path, dirs, files = os.walk("vtkmovie/").next() 28 | 29 | #Name of the model 30 | if ncrit==1: 31 | name_crit='Tresca' 32 | elif ncrit==2: 33 | name_crit='Von Mises' 34 | elif ncrit==3: 35 | name_crit='Mohr-Coulomb' 36 | elif ncrit==4: 37 | name_crit='Drucker-Prager' 38 | elif ncrit==5: 39 | name_crit='Modified Cam Clay' 40 | elif ncrit==6: 41 | name_crit='Lime Treated Soil Model' 42 | 43 | 44 | import sys 45 | for iincs in range(0,nincs): 46 | 47 | sys.stdout.write("\r{0} %".format((float(iincs)/float(nincs+1.0))*100)) 48 | sys.stdout.flush() 49 | 50 | f = open('vtkmovie/vtk_'+str(iincs)+'.vtk','w') 51 | 52 | print("# vtk DataFile Version 1.0", file=f) 53 | print("2D Unstructured Grid of Linear Triangles", file=f) 54 | print("ASCII", file=f) 55 | print("", file=f) 56 | print("DATASET UNSTRUCTURED_GRID", file=f) 57 | print("POINTS "+str(npoint)+" float", file=f) 58 | 59 | #Write coordinates 60 | 61 | 62 | # Import coordinates 63 | #File=base+'/Output/coordinates.txt' 64 | File=base+'/Output/output_increm/displacements/'+str(iincs)+'.dat' 65 | 66 | #data=np.loadtxt(File,skiprows=1) 67 | data=np.loadtxt(File,skiprows=0) 68 | #dat2=np.loadtxt(File2,skiprows=1) 69 | 70 | coord=[] 71 | xmin=9999.0 72 | xmax=-9999.0 73 | ymin=9999.0 74 | ymax=-9999.0 75 | 76 | for i in range(0,len(data)): 77 | coord.append([]) 78 | #coord[i].append((float(data[i,0]))) 79 | #coord[i].append(float(data[i,1])) 80 | 81 | coord[i].append( float(data[i,0])+float(data[i,2]) ) 82 | coord[i].append( float(data[i,1])+float(data[i,3]) ) 83 | 84 | #if (float(data[i,0]) < xmin): 85 | # xmin = float(data[i,0]) 86 | # 87 | #if (float(data[i,0]) > xmax): 88 | # xmax = float(data[i,0]) 89 | # 90 | #if (float(data[i,1]) < ymin): 91 | # ymin = float(data[i,1]) 92 | # 93 | #if (float(data[i,1]) > ymax): 94 | # ymax = float(data[i,1]) 95 | 96 | for i in range(0,len(coord)): 97 | print(str(coord[i][0])+" "+str(coord[i][1])+" "+"0.0", file=f) 98 | 99 | 100 | print("", file=f) 101 | 102 | #Connectivity table 103 | # Import connectivity table 104 | File=base+'/Output/conntable.txt' 105 | data=np.loadtxt(File,skiprows=0) 106 | lnods=[] 107 | 108 | if (nelem>1): 109 | for i in range(0,len(data)): 110 | lnods.append([]) 111 | for j in range(0,nnode): 112 | lnods[i].append((int(data[i,j+1])-1)) 113 | 114 | 115 | if (nelem==1): 116 | for i in range(0,nelem+1): 117 | lnods.append([]) 118 | for j in range(0,nnode): 119 | lnods[i].append((int(data[j+1])-1)) 120 | 121 | print("CELLS "+str(nelem)+" "+str(nelem*(nnode+1)), file=f) 122 | 123 | #Re-order nodes 124 | for i in range(0,len(lnods)): 125 | myorder=[0,2,4,6,1,3,5,7] 126 | lnods_temp = [ lnods[i][j] for j in myorder] 127 | lnods[i]=lnods_temp 128 | 129 | 130 | 131 | for i in lnods: 132 | var=str(i) 133 | var=var[0:-1] 134 | var = var.replace("[",str(nnode)+" ") 135 | newstr = var.replace(",", " ") 136 | print(newstr, file=f) 137 | 138 | print("", file=f) 139 | 140 | print("CELL_TYPES "+str(nelem), file=f) 141 | if (nnode==8): 142 | type=23 143 | elif (nnode==4): 144 | type=9 145 | elif (nnode==4): 146 | type=28 147 | 148 | 149 | for i in range(0,nelem): 150 | print(type, file=f) 151 | 152 | 153 | #START PLOTING THE RESULTS: POINTS 154 | print("", file=f) 155 | print("POINT_DATA "+str(npoint), file=f) 156 | 157 | #------------------------- 158 | # STRAINS 159 | #------------------------- 160 | 161 | File=base+'/Output/output_increm/strains/'+str(iincs) 162 | 163 | x=[] 164 | y=[] 165 | eps_xx=[] 166 | eps_yy=[] 167 | eps_xy=[] 168 | eps_zz=[] 169 | ps_max=[] 170 | epstn=[] 171 | 172 | data=np.loadtxt(File,skiprows=1) 173 | for i in range(0,len(data)): 174 | if data[i,0]==0: 175 | x.append((float(data[i,3]))) 176 | y.append(float(data[i,4])) 177 | eps_xx.append(float(data[i,5])) 178 | eps_yy.append(float(data[i,6])) 179 | eps_xy.append(float(data[i,7])) 180 | eps_zz.append(float(data[i,8])) 181 | ps_max.append(float(data[i,9])) 182 | epstn.append(float(data[i,12])) 183 | 184 | strains=[eps_xx,eps_yy,eps_xy,eps_zz,ps_max,epstn] 185 | 186 | if ntype==3: 187 | names=['eps_rr','eps_zz','eps_rz','eps_tt','eps_max_principal','eps_p'] 188 | else: 189 | names=['eps_xx','eps_yy','eps_xy','eps_zz','eps_max_principal','eps_p'] 190 | compt=-1 191 | 192 | for res in strains: 193 | compt += 1 194 | print("SCALARS " +names[compt]+ " float", file=f) 195 | print("LOOKUP_TABLE default", file=f) 196 | for i in res: 197 | print(i, file=f) 198 | print("", file=f) 199 | 200 | #------------------------- 201 | # STRESSES 202 | #------------------------- 203 | 204 | File=base+'/Output/output_increm/stresses/'+str(iincs) 205 | 206 | x=[] 207 | y=[] 208 | s_xx=[] 209 | s_yy=[] 210 | s_xy=[] 211 | s_zz=[] 212 | s_max=[] 213 | 214 | data=np.loadtxt(File,skiprows=1) 215 | for i in range(0,len(data)): 216 | if data[i,0]==0: 217 | x.append((float(data[i,3]))) 218 | y.append(float(data[i,4])) 219 | s_xx.append(float(data[i,5])) 220 | s_yy.append(float(data[i,6])) 221 | s_xy.append(float(data[i,7])) 222 | s_zz.append(float(data[i,8])) 223 | s_max.append(float(data[i,9])) 224 | 225 | 226 | stresses=[s_xx,s_yy,s_xy,s_zz,s_max] 227 | if ntype==3: 228 | names=['s_rr','s_zz','s_rz','s_tt','s_max_principal'] 229 | else: 230 | names=['s_xx','s_yy','s_xy','s_zz','s_max_principal'] 231 | 232 | compt=-1 233 | 234 | for res in stresses: 235 | compt += 1 236 | print("SCALARS " +names[compt]+ " float", file=f) 237 | print("LOOKUP_TABLE default", file=f) 238 | for i in res: 239 | print(i, file=f) 240 | print("", file=f) 241 | 242 | #------------------------------ 243 | # DEVIATORIC STRESS SXX-SYY 244 | #------------------------------ 245 | 246 | 247 | print("SCALARS " +names[compt]+ " float", file=f) 248 | print("LOOKUP_TABLE default", file=f) 249 | for i,j in zip(s_xx,s_yy): 250 | print(i, file=f) 251 | print("", file=f) 252 | 253 | 254 | #NODAL DISPLACEMENTS 255 | File=base+'/Output/output_increm/displacements/'+str(iincs)+'.dat' 256 | data=np.loadtxt(File,skiprows=0) 257 | 258 | ux=[] 259 | uy=[] 260 | u_norme=[] 261 | 262 | for i in range(0,len(data)): 263 | ux.append((float(data[i,2]))) 264 | uy.append(float(data[i,3])) 265 | u_norme.append( np.sqrt( (float(data[i,2]))**2 + (float(data[i,3]))**2 ) ) 266 | 267 | strains=[ux,uy,u_norme] 268 | names=["ux","uy","u_norme"] 269 | 270 | compt=-1 271 | 272 | for res in strains: 273 | compt += 1 274 | print("SCALARS " +names[compt]+ " float", file=f) 275 | print("LOOKUP_TABLE default", file=f) 276 | for i in res: 277 | print(i, file=f) 278 | 279 | print("", file=f) 280 | 281 | #NODAL FORCES 282 | File=base+'/Output/output_increm/reactions/'+str(iincs)+'.dat' 283 | data=np.loadtxt(File,skiprows=0) 284 | 285 | fx=[] 286 | fy=[] 287 | f_norme=[] 288 | 289 | for i in range(0,len(data)): 290 | fx.append((float(data[i,1]))) 291 | fy.append(float(data[i,2])) 292 | f_norme.append( np.sqrt( (float(data[i,1]))**2 + (float(data[i,2]))**2 ) ) 293 | 294 | strains=[fx,fy,f_norme] 295 | names=["Fx","Fy","F_norme"] 296 | 297 | compt=-1 298 | 299 | for res in strains: 300 | compt += 1 301 | print("SCALARS " +names[compt]+ " float", file=f) 302 | print("LOOKUP_TABLE default", file=f) 303 | for i in res: 304 | print(i, file=f) 305 | 306 | print("", file=f) 307 | 308 | if ncrit==5 or ncrit==6: 309 | #YIELD STRESS AT NODAL POINTS 310 | File=base+'/Output/output_increm/plastic_strains/'+str(iincs) 311 | data=np.loadtxt(File,skiprows=0) 312 | 313 | yield_node=[] 314 | epstnp=[] 315 | deviatoric_stress=[] 316 | effective_mean_stress=[] 317 | 318 | for i in range(0,len(data)): 319 | yield_node.append((float(data[i,5]))) 320 | epstnp.append((float(data[i,6]))) 321 | deviatoric_stress.append((float(data[i,7]))) 322 | effective_mean_stress.append((float(data[i,8]))) 323 | 324 | print("SCALARS yield_stress float", file=f) 325 | print("LOOKUP_TABLE default", file=f) 326 | for i in yield_node: 327 | print(i, file=f) 328 | 329 | print("", file=f) 330 | 331 | #Plastic volumetric deformations AT NODAL POINTS 332 | print("SCALARS epstn_p float", file=f) 333 | print("LOOKUP_TABLE default", file=f) 334 | for i in epstnp: 335 | print(i, file=f) 336 | 337 | print("", file=f) 338 | 339 | #Deviatoric stress AT NODAL POINTS 340 | print("SCALARS deviatoric_stress float", file=f) 341 | print("LOOKUP_TABLE default", file=f) 342 | for i in deviatoric_stress: 343 | print(i, file=f) 344 | 345 | print("", file=f) 346 | 347 | #effective mean stress AT NODAL POINTS 348 | print("SCALARS eff_mean_stress float", file=f) 349 | print("LOOKUP_TABLE default", file=f) 350 | for i in effective_mean_stress: 351 | print(i, file=f) 352 | 353 | print("", file=f) 354 | 355 | #SPECIFIC VOLUME AT NODAL POINTS 356 | File=base+'/Output/output_increm/specific_volume/'+str(iincs)+'.dat' 357 | data=np.loadtxt(File,skiprows=0) 358 | 359 | spe_vol=[] 360 | 361 | 362 | for i in range(0,len(data)): 363 | spe_vol.append((float(data[i,5]))) 364 | 365 | print("SCALARS specific_volume float", file=f) 366 | print("LOOKUP_TABLE default", file=f) 367 | for i in spe_vol: 368 | print(i, file=f) 369 | 370 | print("", file=f) 371 | 372 | 373 | #START PLOTING THE RESULTS: VECTORS 374 | #DISPLACEMENTS VECTORS 375 | print("VECTORS displacements_vec float", file=f) 376 | #print("LOOKUP_TABLE default", file=f) 377 | 378 | for i,j in zip(ux,uy): 379 | alpha=np.sqrt( (i*i + j*j)*1.5) 380 | 381 | if alpha==0.0: 382 | alpha=1.0 383 | 384 | alpha=1.0 385 | 386 | print(str(i/alpha)+' '+str(j/alpha)+' '+'0.0',file=f) 387 | # print(str(ux[i])+" "+str(uy[i])+" "+"0.0", file=f) 388 | 389 | 390 | f.close() 391 | 392 | print("") 393 | print("VTK FILES GENERATED") 394 | #shutil.copy2('vtkmovie/vtk_'+str(iincs)+'.txt', 'vtkmovie/vtk_'+str(iincs)+'.vtk') 395 | 396 | #f = open('myfile.txt','w') 397 | # 398 | # 399 | #f.write('hi there\n') # python will convert \n to os.linesep 400 | #f.close() # you 401 | 402 | #f = open('testvtk2.txt','w') 403 | # 404 | #print("# vtk DataFile Version 1.0", file=f) 405 | #print("2D Unstructured Grid of Linear Triangles", file=f) 406 | #print("ASCII", file=f) 407 | #print("", file=f) 408 | #print("DATASET UNSTRUCTURED_GRID", file=f) 409 | #print("POINTS "+str(npoint+1)+" float", file=f) 410 | # 411 | ##Write coordinates 412 | # 413 | # 414 | ## Import coordinates 415 | #File=base+'/Output/coordinates.txt' 416 | #data=np.loadtxt(File,skiprows=1) 417 | # 418 | #coord=[] 419 | #xmin=9999.0 420 | #xmax=-9999.0 421 | #ymin=9999.0 422 | #ymax=-9999.0 423 | # 424 | #for i in range(0,len(data)): 425 | # coord.append([]) 426 | # coord[i].append((float(data[i,0]))) 427 | # coord[i].append(float(data[i,1])) 428 | # 429 | # if (float(data[i,0]) < xmin): 430 | # xmin = float(data[i,0]) 431 | # 432 | # if (float(data[i,0]) > xmax): 433 | # xmax = float(data[i,0]) 434 | # 435 | # if (float(data[i,1]) < ymin): 436 | # ymin = float(data[i,1]) 437 | # 438 | # if (float(data[i,1]) > ymax): 439 | # ymax = float(data[i,1]) 440 | # 441 | #for i in range(0,len(coord)): 442 | # print(str(coord[i][0])+" "+str(coord[i][1])+" "+"0.0", file=f) 443 | # 444 | #print(str(1.0)+" "+str(1.0)+" "+"0.0", file=f) 445 | # 446 | # 447 | #print("", file=f) 448 | # 449 | ##Connectivity table 450 | ## Import connectivity table 451 | #File=base+'/Output/conntable.txt' 452 | #data=np.loadtxt(File,skiprows=0) 453 | #lnods=[] 454 | # 455 | #if (nelem>1): 456 | # for i in range(0,len(data)): 457 | # lnods.append([]) 458 | # for j in range(0,nnode): 459 | # lnods[i].append((int(data[i,j+1])-1)) 460 | # 461 | # 462 | #if (nelem==1): 463 | # for i in range(0,nelem+1): 464 | # lnods.append([]) 465 | # for j in range(0,nnode): 466 | # lnods[i].append((int(data[j+1])-1)) 467 | # 468 | #print("CELLS "+str(nelem+1)+" "+str(nelem*(nnode+1)+2), file=f) 469 | # 470 | ##Re-order nodes 471 | #for i in range(0,len(lnods)): 472 | # myorder=[0,2,4,6,1,3,5,7] 473 | # lnods_temp = [ lnods[i][j] for j in myorder] 474 | # lnods[i]=lnods_temp 475 | # 476 | # 477 | # 478 | #for i in lnods: 479 | # var=str(i) 480 | # var=var[0:-1] 481 | # var = var.replace("[",str(nnode)+" ") 482 | # newstr = var.replace(",", " ") 483 | # print(newstr, file=f) 484 | # 485 | #print("1 21", file=f) 486 | # 487 | #print("", file=f) 488 | # 489 | #print("CELL_TYPES "+str(nelem+1), file=f) 490 | #if (nnode==8): 491 | # type=23 492 | #elif (nnode==4): 493 | # type=9 494 | #for i in range(0,nelem): 495 | # print(type, file=f) 496 | # 497 | #print("1", file=f) 498 | #print("", file=f) 499 | # 500 | ##Write strains 501 | #print("POINT_DATA "+str(npoint+1), file=f) 502 | #print("SCALARS pressure float", file=f) 503 | #print("LOOKUP_TABLE default", file=f) 504 | # 505 | ##Plot strains 506 | #File=base+'/Output/strains.txt' 507 | # 508 | #x=[] 509 | #y=[] 510 | #eps_xx=[] 511 | #eps_yy=[] 512 | #eps_xy=[] 513 | #eps_zz=[] 514 | #ps_max=[] 515 | # 516 | #uy=[] 517 | #u_norme=[] 518 | # 519 | #data=np.loadtxt(File,skiprows=1) 520 | #for i in range(0,len(data)): 521 | # x.append((float(data[i,3]))) 522 | # y.append(float(data[i,4])) 523 | # eps_xx.append(float(data[i,5])) 524 | # eps_yy.append(float(data[i,6])) 525 | # eps_xy.append(float(data[i,7])) 526 | # eps_zz.append(float(data[i,8])) 527 | # ps_max.append(float(data[i,9])) 528 | # 529 | # 530 | #for i in range(0,npoint): 531 | # print(random.random()*10, file=f) 532 | #print(1000.0, file=f) 533 | # 534 | #f.close() 535 | # 536 | # 537 | #import shutil 538 | #shutil.copy2('testvtk2.txt', 'testvtk2.vtk') 539 | # 540 | ##f = open('myfile.txt','w') 541 | ## 542 | ## 543 | ##f.write('hi there\n') # python will convert \n to os.linesep 544 | ##f.close() # you 545 | # 546 | -------------------------------------------------------------------------------- /PreProcessing/Triaxial.gid/Triaxial.cnd: -------------------------------------------------------------------------------- 1 | BOOK:Stage 1 2 | NUMBER: 1 CONDITION: Prescribed_Displacements 3 | CONDTYPE: over points 4 | CONDMESHTYPE: over nodes 5 | QUESTION: Type#CB#(01,10,11) 6 | VALUE: 01 7 | help: 10=X, 01=Y, 11=X+Y 8 | QUESTION: X-Value 9 | VALUE: 0.0 10 | QUESTION: Y-Value 11 | VALUE: 0.0 12 | END CONDITION 13 | NUMBER: 2 CONDITION: Point_Load 14 | CONDTYPE: over points 15 | CONDMESHTYPE: over nodes 16 | QUESTION: FX-Value#UNITS# 17 | VALUE: 0.0N 18 | QUESTION: FY-Value#UNITS# 19 | VALUE: 0.0N 20 | END CONDITION 21 | NUMBER: 3 CONDITION: Distributed_Loading 22 | CONDTYPE: over lines 23 | CONDMESHTYPE: over face elements 24 | QUESTION: Normal-Pressure#UNITS# 25 | VALUE: 0kPa 26 | QUESTION: Tangent-Pressure#UNITS# 27 | VALUE: 0kPa 28 | END CONDITION 29 | BOOK:Stage 2 30 | NUMBER: 4 CONDITION: Prescribed_Displacements_S2 31 | CONDTYPE: over points 32 | CONDMESHTYPE: over nodes 33 | QUESTION: Type_S2#CB#(01,10,11) 34 | VALUE: 01 35 | help: 01=X, 10=Y, 11=X+Y 36 | QUESTION: X-Value_S2 37 | VALUE: 0.0 38 | QUESTION: Y-Value_S2 39 | VALUE: 0.0 40 | END CONDITION 41 | NUMBER: 5 CONDITION: Point_Load_S2 42 | CONDTYPE: over points 43 | CONDMESHTYPE: over nodes 44 | QUESTION: FX-Value_S2#UNITS# 45 | VALUE: 0.0N 46 | QUESTION: FY-Value_S2#UNITS# 47 | VALUE: 0.0N 48 | END CONDITION 49 | NUMBER: 6 CONDITION: Distributed_Loading_S2 50 | CONDTYPE: over lines 51 | CONDMESHTYPE: over face elements 52 | QUESTION: Normal-Pressure_S2#UNITS# 53 | VALUE: 0Pa 54 | QUESTION: Tangent-Pressure_S2#UNITS# 55 | VALUE: 0Pa 56 | END CONDITION 57 | -------------------------------------------------------------------------------- /PreProcessing/Triaxial.gid/Triaxial.geo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viktorrobin/FEM/519c6811c065ae8d896444d976c00c9b7642b79b/PreProcessing/Triaxial.gid/Triaxial.geo -------------------------------------------------------------------------------- /PreProcessing/Triaxial.gid/Triaxial.lin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viktorrobin/FEM/519c6811c065ae8d896444d976c00c9b7642b79b/PreProcessing/Triaxial.gid/Triaxial.lin -------------------------------------------------------------------------------- /PreProcessing/Triaxial.gid/Triaxial.mat: -------------------------------------------------------------------------------- 1 | NUMBER: 1 MATERIAL: Soil_1 2 | QUESTION: Simga_y/Cohesion#UNITS# 3 | VALUE: 500Pa 4 | QUESTION: Friction_angle 5 | VALUE: 25 6 | QUESTION: Hardening_Parameter 7 | VALUE: 0.1 8 | QUESTION: E#UNITS# 9 | VALUE: 40000Pa 10 | QUESTION: Poisson 11 | VALUE: 0.25 12 | QUESTION: Mass_Density 13 | VALUE: 0 14 | help: Mg/m^3 15 | QUESTION: Thickness#UNITS# 16 | VALUE: 0m 17 | END MATERIAL 18 | NUMBER: 2 MATERIAL: Soil_2 19 | QUESTION: Simga_y/Cohesion#UNITS# 20 | VALUE: 500Pa 21 | QUESTION: Friction_angle 22 | VALUE: 25 23 | QUESTION: Hardening_Parameter 24 | VALUE: 0.1 25 | QUESTION: E#UNITS# 26 | VALUE: 40000Pa 27 | QUESTION: Poisson 28 | VALUE: 0.25 29 | QUESTION: Mass_Density 30 | VALUE: 2.66 31 | help: Mg/m^3 32 | QUESTION: Thickness#UNITS# 33 | VALUE: 0m 34 | END MATERIAL 35 | NUMBER: 3 MATERIAL: Cam-Clay 36 | QUESTION: Yield_Stress_pyI#UNITS# 37 | VALUE: 170kPa 38 | QUESTION: lambda 39 | VALUE: 0.075 40 | QUESTION: kappa 41 | VALUE: 0.005 42 | QUESTION: v0_Nlambda 43 | VALUE: 1.99 44 | help: initial specific volume on ncl at 1 Pa 45 | QUESTION: M 46 | VALUE: 1.0 47 | QUESTION: E#UNITS# 48 | VALUE: 50000kPa 49 | QUESTION: Poisson 50 | VALUE: 0.25 51 | QUESTION: Mass_Density#UNITS# 52 | VALUE: 0kg/m^3 53 | QUESTION: Thickness#UNITS# 54 | VALUE: 0m 55 | END MATERIAL 56 | NUMBER: 4 MATERIAL: Lime_Treated_Soil_1 57 | QUESTION: Lime_Content 58 | VALUE: 1 59 | help: (%) 60 | QUESTION: Yield_Stress_pyI#UNITS# 61 | VALUE: 500Pa 62 | QUESTION: Degradation_Stress_pyII#UNITS# 63 | VALUE: 1000Pa 64 | QUESTION: lambda 65 | VALUE: 0.1 66 | QUESTION: kappa 67 | VALUE: 0.05 68 | QUESTION: Dei 69 | VALUE: 0.2 70 | QUESTION: Dec 71 | VALUE: 0.1 72 | QUESTION: beta 73 | VALUE: 0.05 74 | QUESTION: v0_Nlambda 75 | VALUE: 2.1 76 | help: initial specific volume on ncl at 1 Pa 77 | QUESTION: pb#UNITS# 78 | VALUE: -50Pa 79 | help: tensile strength=-c/M 80 | QUESTION: M 81 | VALUE: 1.0 82 | QUESTION: E#UNITS# 83 | VALUE: 40000Pa 84 | QUESTION: Poisson 85 | VALUE: 0.25 86 | QUESTION: Mass_Density 87 | VALUE: 2.66 88 | help: Mg/m^3 89 | END MATERIAL 90 | NUMBER: 5 MATERIAL: Lime_Treated_Soil_2 91 | QUESTION: Lime_Content 92 | VALUE: 1 93 | help: (%) 94 | QUESTION: Yield_Stress_pyI#UNITS# 95 | VALUE: 750Pa 96 | QUESTION: Degradation_Stress_pyII#UNITS# 97 | VALUE: 1000Pa 98 | QUESTION: lambda 99 | VALUE: 0.1 100 | QUESTION: kappa 101 | VALUE: 0.05 102 | QUESTION: Dei 103 | VALUE: 0.2 104 | QUESTION: Dec 105 | VALUE: 0.1 106 | QUESTION: beta 107 | VALUE: 0.05 108 | QUESTION: v0_Nlambda 109 | VALUE: 2.1 110 | help: initial specific volume on ncl at 1 Pa 111 | QUESTION: pb#UNITS# 112 | VALUE: -50Pa 113 | help: tensile strength=-c/M 114 | QUESTION: M 115 | VALUE: 1.0 116 | QUESTION: E#UNITS# 117 | VALUE: 40000Pa 118 | QUESTION: Poisson 119 | VALUE: 0.25 120 | QUESTION: Mass_Density 121 | VALUE: 2.66 122 | help: Mg/m^3 123 | END MATERIAL 124 | -------------------------------------------------------------------------------- /PreProcessing/Triaxial.gid/Triaxial.msh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viktorrobin/FEM/519c6811c065ae8d896444d976c00c9b7642b79b/PreProcessing/Triaxial.gid/Triaxial.msh -------------------------------------------------------------------------------- /PreProcessing/Triaxial.gid/Triaxial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viktorrobin/FEM/519c6811c065ae8d896444d976c00c9b7642b79b/PreProcessing/Triaxial.gid/Triaxial.png -------------------------------------------------------------------------------- /PreProcessing/Triaxial.gid/Triaxial.prb: -------------------------------------------------------------------------------- 1 | PROBLEM DATA 2 | title: General Data 3 | QUESTION: Problem_name 4 | VALUE: Test mega 5 | QUESTION: Yield_Criterion#CB#(Tresca,Von_Mises,Mohr-Coulomb,Drucker-Prager,Modified_Cam_Clay,Lime_Treated_Soils) 6 | VALUE: Modified_Cam_Clay 7 | QUESTION: No_Gauss#CB#(2,3) 8 | VALUE: 3 9 | QUESTION: Type_of_problem#CB#(Plane-Stress,Plane-Strain,Axisymmetric) 10 | VALUE: Axisymmetric 11 | QUESTION: Tolerance 12 | VALUE: 1e-6 13 | QUESTION: Solver_type#CB#(Conjugate_gradient) 14 | VALUE: Conjugate_gradient 15 | QUESTION: Algorithm#CB#(Initial_Stiffness_Method) 16 | VALUE: Initial_Stiffness_Method 17 | TITLE: Stage 1 18 | QUESTION: Number_of_increments_S1 19 | VALUE: 20 20 | QUESTION: Prescribed_Disp#CB#(0,1) 21 | VALUE: 1 22 | QUESTION: Point_Load#CB#(0,1) 23 | VALUE: 24 | QUESTION: Distributed_Loading#CB#(0,1) 25 | VALUE: 1 26 | QUESTION: Gravity_Loading#CB#(0,1) 27 | VALUE: 0 28 | DEPENDENCIES: (0,HIDE,theta,#current#,HIDE,g_force,#current#) 29 | DEPENDENCIES: (1,RESTORE,theta,#current#,RESTORE,g_force,#current#) 30 | QUESTION: theta 31 | VALUE: 0.0 32 | help: Angle between gravity axis and positive y-axis. Anticlockwise. Degrees. 33 | QUESTION: g_force#UNITS# 34 | VALUE: 9.81m/s^2 35 | TITLE: Stage 2 36 | QUESTION: Stage_2#CB#(0,1) 37 | VALUE: 1 38 | DEPENDENCIES: (0,HIDE,Number_of_increments_S2,#current#,HIDE,Prescribed_Disp_S2,#current#,HIDE,Point_Load_S2,#current#,HIDE,Distributed_Loading_S2,#current#,HIDE,theta_S2,#current#,HIDE,g_force_S2,#current#,HIDE,Gravity_Loading_S2,#current#) 39 | DEPENDENCIES: (1,RESTORE,Number_of_increments_S2,#current#,RESTORE,Prescribed_Disp_S2,#current#,RESTORE,Point_Load_S2,#current#,RESTORE,Distributed_Loading_S2,#current#,RESTORE,Gravity_Loading_S2,#current#) 40 | QUESTION: Number_of_increments_S2 41 | VALUE: 20 42 | QUESTION: Prescribed_Disp_S2#CB#(0,1) 43 | VALUE: 1 44 | QUESTION: Point_Load_S2#CB#(0,1) 45 | VALUE: 46 | QUESTION: Distributed_Loading_S2#CB#(0,1) 47 | VALUE: 48 | QUESTION: Gravity_Loading_S2#CB#(0,1) 49 | VALUE: 0 50 | DEPENDENCIES: (0,HIDE,theta_S2,#current#,HIDE,g_force_S2,#current#) 51 | DEPENDENCIES: (1,RESTORE,theta_S2,#current#,RESTORE,g_force_S2,#current#) 52 | QUESTION: theta_S2 53 | VALUE: 0.0 54 | help: Angle between gravity axis and positive y-axis. Anticlockwise. Degrees. 55 | QUESTION: g_force_S2#UNITS# 56 | VALUE: 9.81m/s^2 57 | END PROBLEM DATA 58 | INTERVAL DATA 59 | END INTERVAL DATA 60 | -------------------------------------------------------------------------------- /PreProcessing/Triaxial.gid/Triaxial.uni: -------------------------------------------------------------------------------- 1 | model: m 2 | problem: INTERNATIONAL 3 | -------------------------------------------------------------------------------- /PreProcessing/Triaxial.gid/Triaxial.vv: -------------------------------------------------------------------------------- 1 | BeginZE C:\Users\vpmr201\Dropbox\These\Numerical_modelling\FEM_CamClay_PostProc\PreProcessing\Triaxial.gid\Triaxial.vv 2 | x -33.968654632568359 51.468654632568359 3 | y 37.916667938232422 -2.9166684150695801 4 | z -61.25 61.25 5 | e 20.416666030883789 6 | v 0 0 0 7 | r 1 8 | m 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 9 | c 8.75 17.5 0 10 | pd 0 11 | pno 0 12 | pfo 0 13 | pf 4 14 | pv 0 15 | NowUse 1 16 | DrawingType 0 17 | LightVector 90 90 150 0 18 | OGLShadow(UseShadows) 0 19 | OGLShadow(RenderMode) RenderNice 20 | OGLShadow(ShadowBias) -0.002 21 | OGLShadow(AmbientShadows) 1 22 | OGLShadow(UseFBO) 1 23 | OGLShadow(FBOSize) 2048 24 | OGLShadow(DimmedLightFactor) 0.02 25 | OGLStereo(UseStereo) 0 26 | OGLStereo(RelativeEyeDistance) 1 27 | OGLStereo(FlipEyes) 0 28 | OGLStereo(StereoMode) AnaglyphColors 29 | OGLStereo(EyeDistance) 0.075 30 | OGLStereo(LeftEyeDistance) 1 0 0 1 31 | OGLStereo(RightEyeDistance) 0 1 1 1 32 | EndZE C:\Users\vpmr201\Dropbox\These\Numerical_modelling\FEM_CamClay_PostProc\PreProcessing\Triaxial.gid\Triaxial.vv 33 | 34 | BeginMirror 35 | Mirror 0 Angle 0.0 AngleFake -15.0 SizeFactor 2.0 HeightOffset 0.25 Color #d9e5f24d Backlight Off EdgeStyle No Type Scene DrawMode Mirror 36 | EndMirror 37 | 38 | BeginInfo 39 | eJzNU8tu2zAQvOsr9hgDiiE7TmoIRQG7VgyhfgS28ujJoKW1Q4QiBZKK5Qb59y4pGz206KFogV6k1T5mOTNUloth97rb60H2QsFF+9EJgkztBfS6H2Jg5gUL2CkNDPYoUfMcNMoCNeowGPnqHW9QUEvJLBRocs0ry5WEC+gPOnEAANPTJC8rgSVKy1xD2E7etpP9QehaJ6reChzXux3qGI5ofHZtaaFqsz6xmo5HIXxWZaUM99tQMhos4OKBG8s6IUw0O4BV8MhloQ4hLCuU0xmYuqqUtiE4mHvD5Z5WE5IgjltuTQxDYliE9NprROmCragRmCwgAiaqZxb+mI1glOd1WQtP6YQQtQjRGSH6HcJVHyZY2Wc/63uGjq/MuRhTxjXSkrrhgjN9hK0XoU1HUDsrBDuS2FFzuWs6HkC9npNNdNnsOlAJJtEEU2UJ+B8bBrmqjn/fJJLpj026GfzKpd5Ni0HvEwhF/4dRgddBeC8eksVkuYrhbc5zrYzaWRJCkzyey7sXmlqSVeKappP07N57O71ap8sFse32upE3LF3fzUZfIV3cLlfzUearb54TyQHDsFXDBV4MenslIArptjj+V/0QTEvcVY3/OUGqrt/48fETJK3UJNqtVtJCez1cdZbO02xNC93HnDWQYWNrjbDm35BOGfUH50rSXj0DqSx4juRYPxoMf6o+oLan8vWNq45eGRfunsErL+hgJZaK/DB+QQTz8dGiOcHwsi7hoPSLO6usyy1qUDvAE3gM1+Tdl8ATS56yZOHE9MefzjaU2Gz3mp3jigmkH6zY2JaTyz+mi405sGrzzKUlnOnsKfa2rpMVeRMHS3qSHXSyc0jOwDxZ3LvUd+v6wOs= 40 | 41 | EndInfo 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FEM 2 | Finite Element Modelling in Fortran for structural problems, solid mechanics, geotechnic and artificially structured soil 3 | 4 | ![FEM](figures/PostProcessing-FieldDisp2-small.png) 5 | 6 | Based on *Based on Finite Elements in Plasticity: Theory and Practice* by Owen & Hinton 7 | 8 | ## Yield criterion implemented 9 | 10 | - Von Mises 11 | - Mohr-Coulomb 12 | - Tresca 13 | - Drucker-Prager 14 | - Cam-Clay modified 15 | - [MAAS (Robin et al., 2015)](https://ore.exeter.ac.uk/repository/bitstream/handle/10871/20697/An%20Efective%20Constitutive%20Model%20for%20Lime%20Treated%20Soils.pdf?sequence=2&isAllowed=y) 16 | 17 | ## Model MASS 18 | 19 | ![MAAS](figures/MCC-DP-hybrid-1-01.png) 20 | 21 | - [MAAS (Robin et al., 2015)](https://ore.exeter.ac.uk/repository/bitstream/handle/10871/20697/An%20Efective%20Constitutive%20Model%20for%20Lime%20Treated%20Soils.pdf?sequence=2&isAllowed=y) 22 | - [Robin, 2014](https://core.ac.uk/download/pdf/43094182.pdf) 23 | 24 | ## Code FEMASS: Instructions 25 | This code includes the pre-processing, processing, and post-processing of geotechnical problems. 26 | 27 | ### Requirements 28 | 29 | - gfortran. Works on Mac and Linux. Windows not tested. 30 | - Python 31 | - GiD 32 | - Paraview 33 | 34 | 35 | ## Pre-processing : GID 36 | 37 | Import the Problem_Type (folder ProblemType_GiD) into GiD. The procedure is the same as the one to import Code_Bright. 38 | 39 | To plot the mesh, give the values of the parameters, etc… follow the procedure given in the pdf ProblemType_GiD > Tutorial_II_Shallow_Foundation.pdf (source from Code_Bright). 40 | 41 | When everything is ready, save the project Proj_FEMASS.gid in the folder `FEMASS > PreProcessing`. 42 | 43 | Run the calculations: this will generate an output file Proj_FEMASS.dat that contains all the informations required for the FEM simulations, the format being based on the approach given in Owen and Hinton. 44 | 45 | ## Processing: Fortran 46 | 47 | Open FEMASS > subroutines > input_data_GiD.f90 and change l.28 to change the path to your GiD Project. 48 | 49 | From a termina: 50 | 51 | ```basH 52 | cd /path/to/folder/FEMASS 53 | gfortran –llapack –lblas main.f90 54 | ./a.out 55 | ``` 56 | 57 | This will start the calculations. 58 | 59 | All the global variables are described in `▸ FEMASS ▸ workspace ▸ Module.f90` 60 | 61 | ## Post-Processing: Paraview 62 | 63 | During processing stage, the results at each increment are saved in the folder: 64 | `FEMASS ▸ PostProcessing ▸ Output ▸ output_increm` 65 | 66 | Before a simulation, it can be good to erase all the files already present by running the python scripts `Purge_output.py` and `Purge_vtkmovie.py`. 67 | 68 | Run the Python script `output_vtk_python.py`. 69 | This will create as many number of vtk files as increments performed during the simulation in the folder vtk_movie. 70 | 71 | Open this folder with Paraview; it will automatically load all the increments, and allow the visualisation of the complete simulation. 72 | Numerous parameters can be visualised: stresses, strains, etc.. 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /figures/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viktorrobin/FEM/519c6811c065ae8d896444d976c00c9b7642b79b/figures/.DS_Store -------------------------------------------------------------------------------- /figures/MCC-DP-hybrid-1-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viktorrobin/FEM/519c6811c065ae8d896444d976c00c9b7642b79b/figures/MCC-DP-hybrid-1-01.png -------------------------------------------------------------------------------- /figures/PostProcessing-FieldDisp2-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viktorrobin/FEM/519c6811c065ae8d896444d976c00c9b7642b79b/figures/PostProcessing-FieldDisp2-small.png -------------------------------------------------------------------------------- /libblas.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viktorrobin/FEM/519c6811c065ae8d896444d976c00c9b7642b79b/libblas.a -------------------------------------------------------------------------------- /liblapack.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viktorrobin/FEM/519c6811c065ae8d896444d976c00c9b7642b79b/liblapack.a -------------------------------------------------------------------------------- /main.f90: -------------------------------------------------------------------------------- 1 | 2 | !****************************************************************** 3 | ! PROGRAM FOR THE ELASTO PLASTIC ANALYSIS OF PLANE STRESSES, 4 | ! PLAN STRAN,AND AXISYMETRIC SOLIDS (FOR SATURATED SOILS) 5 | !****************************************************************** 6 | 7 | ! Based on Finite Elements in Plasticity: "Theory and Practice by Owen & Hinton" 8 | ! Fortran 90 version by Victor ROBIN - 22.09.12, Nancy 9 | 10 | ! Number of degrees of freedom per node: 2 11 | ! 1-X-DISPLACENETS 12 | ! 2-Y-DISPLACEMENTS 13 | 14 | ! Version 2 for ELASTIC & PLASTIC behaviour: Von Mises, Mohr-Coulomb, Tresca, Drucker-Prager 15 | ! Started: 10.08.2013, Exeter 16 | ! Finished: 18.08.2013 17 | ! By: Victor ROBIN 18 | !****************************************************************** 19 | 20 | include 'workspace/Module.f90' !Compile global variables 21 | 22 | program elast 23 | 24 | use variables ! Use gobal variables 25 | 26 | implicit none 27 | 28 | ! Declare variables 29 | integer :: i, j, loca, itotv, rep_a, rep_c 30 | double precision :: prev_res 31 | 32 | include 'subroutines/interface.f90' 33 | 34 | real, dimension(2) :: tarray 35 | real :: e 36 | INTEGER :: clock_start,clock_end,clock_rate, ielapsed,ielapsed1,ielapsed2,ielapsed3,ielapsed4 37 | double precision:: elapsed_time,cstart,cend,crate, ave1,ave2,ave3,ave4 38 | integer :: info,n 39 | 40 | ! To deactivate the ouput in terminal (time optimization), uncomment this line: 41 | ! open(unit=6,file='temp/output_terminal.txt') 42 | 43 | 44 | CALL SYSTEM_CLOCK(COUNT_RATE=clock_rate) ! Find the rate 45 | CALL SYSTEM_CLOCK(COUNT=clock_start) ! Start timing 46 | 47 | e=ETIME(tarray) 48 | 49 | ! Timer 50 | call cpu_time(start) 51 | 52 | !*************************************** 53 | ! Version without GID: 54 | 55 | ! Preset variables associated with dynamic dimensioning 56 | ! call dimen( ) 57 | 58 | ! ! Call the subroutine which reads most of the problem data 59 | ! call input( ) 60 | 61 | ! ! Call the subroutine which calculates the consistent load vector for each element after reading the relevant input data 62 | ! call loadps( ) 63 | !*************************************** 64 | 65 | call input_data_GiD( ) 66 | call Read_Bound_Cond_Gid( ) 67 | 68 | ! Initialise certain arrays 69 | call zero( ) 70 | 71 | ! Output initial state 72 | iincs=0 73 | count_file=0 74 | 75 | call output_increm( ) 76 | 77 | do istage=1,nstage 78 | 79 | ! In case there are more than one stage, read the boundaries conditions for the second stage 80 | if (istage == 2) then 81 | call Read_Bound_Cond_Gid_S2() 82 | end if 83 | 84 | ! Loop over each increment 85 | do iincs=1,nincs 86 | 87 | count_file=count_file+1 88 | ! Start Timer 89 | call cpu_time(start_inc) 90 | 91 | ! Read data for current increment 92 | call increm( ) 93 | 94 | ! Evaluation of the element stiffness matrices Ke 95 | call stiffp( ) 96 | 97 | ! Assembly global stiffness matrix [K] and global load vector 98 | call assemb( ) 99 | 100 | ! If required, correct global stiffness matrix [K] and global load vector to account for prescribed displacements 101 | ! if (drap_pres==1) then 102 | ! call greduc( ) 103 | ! end if 104 | 105 | ! Reduction of the global stiffness matrix and global load vector using boundary conditions 106 | call reduc( ) 107 | 108 | 109 | ! Initialization of the residual vector 110 | do i=1,size(rgload,1) 111 | vec_residu(i)=rgload(i) 112 | end do 113 | 114 | iiter=0 115 | norme=epsilon+1 116 | prev_res=10000 117 | 118 | gload_backup=gload 119 | 120 | ! Display Reduced Stiffness Matrix 121 | ! call disp_rgstif( ) 122 | ! stop 123 | 124 | ! Start iteration process to solve [K].{Un}={F} 125 | do while (norme > epsilon) 126 | 127 | 128 | ! Counter for number of iterations 129 | iiter=iiter+1 130 | 131 | ! If prescribed displacements, modify load vectors for first iteration 132 | if (drap_pres ==1 .and. iiter==1) then 133 | 134 | ! ! Add prescribe displacements to load vectors 135 | call prescdisp() 136 | 137 | ! Solve linear system A.X=B using conjugate gradient: [K].{Un}={F} 138 | n=size(rgstif,1) 139 | rgstif_lapack=rgstif 140 | rasdis_lapack=vec_residu_pd 141 | 142 | CALL DGESV(n,1,rgstif_lapack,n,ipiv,rasdis_lapack,n,info) 143 | ! CALL dposv('Upper',n,1,rgstif_lapack,n,rasdis_lapack,n,info) 144 | 145 | 146 | rasdis=rasdis_lapack 147 | 148 | else 149 | ! No prescribed displacements: 150 | ! Solve linear system A.X=B using conjugate gradient: [K].{Un}={F} 151 | n=size(rgstif,1) 152 | 153 | rgstif_lapack=rgstif 154 | rasdis_lapack=vec_residu 155 | 156 | CALL DGESV(n,1,rgstif_lapack,n,ipiv,rasdis_lapack,n,info) 157 | 158 | rasdis=rasdis_lapack 159 | 160 | end if 161 | 162 | asdis=0.d0 163 | 164 | ! Inject displacement values in asdis(ntotv) (global vector) 165 | do i=1,nvlib 166 | loca=gcoord(i) 167 | asdis(loca)=rasdis(i) 168 | end do 169 | 170 | 171 | ! Only for the first iteration, add prescribed displacements 172 | if (drap_pres==1 .and. iiter==1) then 173 | do i=1,ntotv 174 | if (iffix(i)==1 .and. fixed(i)/=0.d0) then 175 | asdis(i)=fixed(i) 176 | end if 177 | end do 178 | end if 179 | 180 | ! Add displacement to previous total displacements values 181 | do itotv=1,ntotv 182 | tdisp(itotv)=tdisp(itotv)+asdis(itotv) 183 | end do 184 | 185 | ! Calculate strain tensor, stress tensor, and global load forces 186 | call residu( ) 187 | 188 | ! Check for convergence using load forces vector previously calculated 189 | call conver( ) 190 | 191 | 192 | end do 193 | 194 | !Calculate average 195 | ave1=0.d0 196 | ave2=0.d0 197 | ave3=0.d0 198 | 199 | ! output results Owen & Hilton Style 200 | call output( ) 201 | 202 | ! output results Owen & Hilton Style 203 | call output_increm( ) 204 | 205 | call output_deviator( ) 206 | 207 | end do !nincs 208 | 209 | end do !nstage 210 | 211 | ! Output results of this increment in vtk files 212 | print *,' ' 213 | print *,'-----------------------------------' 214 | print *,'Exporting results...' 215 | print *,'-----------------------------------' 216 | print *,' ' 217 | call output_python( ) 218 | 219 | 220 | close(5) 221 | close(1) 222 | close(55) 223 | close(56) 224 | close(132) 225 | 226 | print *, " " !Mise en page de la sortie console 227 | print *, "FINITE ELEMENT ANALYSIS COMPLETED" 228 | 229 | e=ETIME(tarray) 230 | print *, 'elapsed:',e 231 | print *, 'user:',tarray(1) 232 | print *, 'sys:',tarray(2) 233 | 234 | 235 | print *, '' 236 | print *,'Total time execution:' 237 | 238 | CALL SYSTEM_CLOCK(COUNT=clock_end) ! Stop timing 239 | ! Calculate the elapsed time in seconds: 240 | cstart=clock_start 241 | cend=clock_end 242 | crate=clock_rate 243 | ! elapsed_time=((clock_end-clock_start)/clock_rate) 244 | elapsed_time=(cend-cstart)/crate 245 | 246 | if (elapsed_time < 60) then 247 | !Seconds 248 | 249 | write(6,222) elapsed_time 250 | 222 format(f5.2,1x,3hsec) 251 | 252 | else if (elapsed_time > 60 .and. elapsed_time < 3600) then 253 | !Min - Sec 254 | ielapsed=elapsed_time/60 255 | ielapsed2=(elapsed_time/60 - ielapsed)*60 256 | 257 | write(6,223) ielapsed, ielapsed2 258 | 223 format(i2,1x,3hmin,1x,i2,1x,3hsec) 259 | 260 | else if (elapsed_time >= 3600 .and. elapsed_time < 86400) then 261 | !Hours-Min-Seconds 262 | ielapsed3=elapsed_time/3600 263 | ielapsed=(elapsed_time/3600 - ielapsed3)*60 264 | ielapsed2=(elapsed_time - ielapsed3*3600-ielapsed*60) 265 | 266 | write(6,224) ielapsed3,ielapsed, ielapsed2 267 | 224 format(i2,1x,5hhours,1x,i2,1x,3hmin,1x,i2,1x,3hsec) 268 | 269 | else if (elapsed_time >= 86400) then 270 | !Days-Hours-Min-Seconds 271 | ielapsed1=elapsed_time/86400 272 | ielapsed2=elapsed_time/3600 - ielapsed1*24 273 | ielapsed3=elapsed_time/60 - ielapsed1*1440-ielapsed2*60 274 | ielapsed4=elapsed_time - ielapsed1*86400-ielapsed2*60*60-ielapsed3*60 275 | write(6,225) ielapsed1,ielapsed2, ielapsed3,ielapsed4 276 | 225 format(i2,1x,4hDays,1x,i2,1x,5hhours,1x,i2,1x,3hmin,1x,i2,1x,3hsec) 277 | 278 | 279 | end if 280 | 281 | end program elast 282 | 283 | ! Load subroutines files 284 | include 'subroutines/geometry.f90' ! Import mesh, geometry (nnode, convectivity table), and boundary conditions 285 | include 'subroutines/input_examples.f90' ! Different simulations 286 | include 'subroutines/FEM.f90' ! Subroutines inherent to FEM analysis: shape functions, element stiffness matrix, assembling, etc... 287 | include 'subroutines/numerical_analysis.f90' ! Classic numerical methods: conjugate gradient, jacobian matrix, etc... 288 | include 'subroutines/control.f90' ! Procedures to check geometry is consistent 289 | include 'subroutines/output.f90' ! Subroutines to print output on the terminal 290 | include 'subroutines/output_vtk.f90' ! Subroutines to generate .vtk file for Paraview 291 | include 'subroutines/plasticity.f90' 292 | include 'subroutines/GaussJordan2.f90' 293 | include 'subroutines/output_python.f90' 294 | include 'subroutines/output_deviator.f90' 295 | include 'subroutines/input_bound_cond_GiD.f90' 296 | include 'subroutines/input_data_GiD.f90' 297 | include 'subroutines/validation.f90' 298 | 299 | 300 | -------------------------------------------------------------------------------- /subroutines/GaussJordan.f90: -------------------------------------------------------------------------------- 1 | ! Pivot de Gauss 2 | 3 | subroutine GaussJordan() 4 | use variables 5 | 6 | implicit none 7 | double precision, dimension(nvlib) :: fresv 8 | integer :: i, j, kount, ieqns, icols, ieqn1, irows, jevab 9 | 10 | double precision :: factr, pivot 11 | 12 | integer :: nback,nbac1, ipoin, idofn, neqn1 13 | 14 | double precision, dimension(nvlib) :: xdisp, react 15 | double precision, dimension(nvlib,2) :: gtdisp, gtreac 16 | double precision, dimension(nvlib,nvlib) :: grgstif 17 | double precision :: resid, k1, k2, k3, k4 18 | 19 | !Gaussian Reduction 20 | kount=0 21 | 22 | do i=1,nvlib 23 | do j=1,nvlib 24 | grgstif(i,j)=rgstif(i,j) 25 | end do 26 | end do 27 | 28 | call disp_rgstif() 29 | 30 | print *,'gload=',rgload 31 | print *,'rfixed=',rfixed 32 | print *,'riffix=',riffix 33 | ! stop 34 | 35 | react=0.d0 36 | xdisp=0.d0 37 | 38 | do i=1,size(rgload,1) 39 | rgload(i)=vec_residu(i) 40 | end do 41 | 42 | 43 | do 70 ieqns=1,nvlib 44 | if (riffix(ieqns) == 1) go to 40 45 | 46 | ! Get the pivot 47 | pivot=rgstif(ieqns,ieqns) 48 | print *,'pivot=',pivot 49 | 50 | if (abs(pivot) < 1.0d-9) then 51 | write(6,*) 'Incorrect pivot=',pivot,'line=',ieqns 52 | stop 53 | end if 54 | 55 | if (ieqns==nvlib) go to 70 56 | 57 | ieqn1=ieqns+1 58 | 59 | do 30 irows=ieqn1,nvlib 60 | kount=kount+1 61 | ! if (rgstif(irows,ieqns) /= 0.d0) then 62 | factr=rgstif(irows,ieqns)/pivot 63 | fresv(kount)=factr 64 | 65 | if (factr==0.d0) go to 30 66 | 67 | ! Modify matrix [K]=rgstif 68 | do icols=ieqns,nvlib 69 | rgstif(irows,icols)=rgstif(irows,icols) - factr*rgstif(ieqns,icols) 70 | end do 71 | 72 | ! Modify rgload 73 | rgload(irows)=rgload(irows) - factr*rgload(ieqns) 74 | 30 continue 75 | ! end if 76 | 77 | go to 70 78 | 79 | ! if (riffix(ieqns) == 1) then 80 | 81 | !Displacement is prescribed; we substitute the prescribed value into the remaining equations 82 | 40 continue 83 | do irows=ieqns,nvlib 84 | ! if (rgstif(irows,ieqns) /= 0.d0) then 85 | rgload(irows)=rgload(irows)-rgstif(irows,ieqns)*rfixed(ieqns) 86 | ! rgstif(irows,ieqns)=0.d0 87 | ! end if 88 | end do 89 | ! end if 90 | 70 continue 91 | 92 | 93 | ! print *,'rgload=',rgload 94 | 95 | ! do ieqns=1,nvlib 96 | ! print *,(rgstif(ieqns,jevab),jevab=1,nvlib) 97 | ! end do 98 | 99 | 100 | !Back-substitution routine 101 | 102 | do 100 ieqns=1,nvlib 103 | react(ieqns)=0.d0 104 | 100 continue 105 | 106 | neqn1=nvlib+1 107 | 108 | do 400 ieqns=1,nvlib 109 | nback=neqn1-ieqns 110 | 111 | pivot=rgstif(nback,nback) 112 | resid=rgload(nback) 113 | 114 | if (nback == nvlib) go to 300 115 | 116 | nbac1=nback+1 117 | 118 | do 200 icols=nbac1,nvlib 119 | resid=resid - rgstif(nback,icols)*xdisp(icols) 120 | 200 continue 121 | 122 | 300 if (riffix(nback) == 0) xdisp(nback)=resid/pivot 123 | if (riffix(nback) == 1) xdisp(nback)=rfixed(nback) 124 | if (riffix(nback) == 1) react(nback) = -resid 125 | 126 | 127 | 128 | 400 continue 129 | 130 | kount=0 131 | do ipoin=1,npoin 132 | do idofn=1,ndofn 133 | kount=kount+1 134 | gtdisp(ipoin,idofn)=xdisp(kount) 135 | gtreac(ipoin,idofn)=react(kount) 136 | end do 137 | end do 138 | 139 | print *, 'react=',react 140 | print *, 'disp=',xdisp 141 | 142 | do i=1,nvlib 143 | do j=1,nvlib 144 | rgstif(i,j)=grgstif(i,j) 145 | end do 146 | end do 147 | 148 | ! asdis=xdisp 149 | ! vec_residu_big=rgload 150 | rasdis=xdisp 151 | print *,vec_residu 152 | ! stop 153 | end subroutine 154 | 155 | -------------------------------------------------------------------------------- /subroutines/GaussJordan2.f90: -------------------------------------------------------------------------------- 1 | ! Pivot de Gauss 2 | 3 | subroutine GaussJordan2() 4 | use variables 5 | 6 | implicit none 7 | double precision, dimension(ntotv) :: fresv 8 | integer :: i, j, kount, ieqns, icols, ieqn1, irows, jevab 9 | 10 | double precision :: factr, pivot 11 | 12 | integer :: nback,nbac1, ipoin, idofn, neqn1 13 | 14 | double precision, dimension(ntotv) :: xdisp, react 15 | double precision, dimension(ntotv,2) :: gtdisp, gtreac 16 | 17 | double precision :: resid, k1, k2, k3, k4 18 | 19 | !Gaussian Reduction 20 | kount=0 21 | 22 | ! call disp_gstif() 23 | 24 | print *,'gload=',gload 25 | print *,'fixed=',fixed 26 | print *,'iffix=',iffix 27 | ! stop 28 | 29 | react=0.d0 30 | xdisp=0.d0 31 | 32 | ! do i=1,size(gload,1) 33 | ! gload(i)=vec_residu(i) 34 | ! end do 35 | 36 | ! if (iiter>1) then 37 | ! gload=vec_residu 38 | ! end if 39 | 40 | do 70 ieqns=1,ntotv 41 | if (iffix(ieqns) == 1) go to 40 42 | 43 | ! Get the pivot 44 | pivot=gstif(ieqns,ieqns) 45 | print *,'pivot=',pivot 46 | 47 | if (abs(pivot) < 1.0d-9) then 48 | write(6,*) 'Incorrect pivot=',pivot,'line=',ieqns 49 | stop 50 | end if 51 | 52 | if (ieqns==ntotv) go to 70 53 | 54 | ieqn1=ieqns+1 55 | 56 | do 30 irows=ieqn1,ntotv 57 | kount=kount+1 58 | ! if (gstif(irows,ieqns) /= 0.d0) then 59 | factr=gstif(irows,ieqns)/pivot 60 | fresv(kount)=factr 61 | 62 | if (factr==0.d0) go to 30 63 | 64 | ! Modify matrix [K]=gstif 65 | do icols=ieqns,ntotv 66 | gstif(irows,icols)=gstif(irows,icols) - factr*gstif(ieqns,icols) 67 | end do 68 | 69 | ! Modify gload 70 | gload(irows)=gload(irows) - factr*gload(ieqns) 71 | 30 continue 72 | ! end if 73 | 74 | go to 70 75 | 76 | ! if (iffix(ieqns) == 1) then 77 | 78 | !Displacement is prescribed; we substitute the prescribed value into the remaining equations 79 | 40 continue 80 | do irows=ieqns,ntotv 81 | ! if (gstif(irows,ieqns) /= 0.d0) then 82 | gload(irows)=gload(irows)-gstif(irows,ieqns)*fixed(ieqns) 83 | ! gstif(irows,ieqns)=0.d0 84 | ! end if 85 | end do 86 | ! end if 87 | 70 continue 88 | 89 | 90 | ! print *,'gload=',gload 91 | 92 | ! do ieqns=1,ntotv 93 | ! print *,(gstif(ieqns,jevab),jevab=1,ntotv) 94 | ! end do 95 | 96 | 97 | !Back-substitution routine 98 | 99 | do 100 ieqns=1,ntotv 100 | react(ieqns)=0.d0 101 | 100 continue 102 | 103 | neqn1=ntotv+1 104 | 105 | do 400 ieqns=1,ntotv 106 | nback=neqn1-ieqns 107 | 108 | pivot=gstif(nback,nback) 109 | resid=gload(nback) 110 | 111 | if (nback == ntotv) go to 300 112 | 113 | nbac1=nback+1 114 | 115 | do 200 icols=nbac1,ntotv 116 | resid=resid - gstif(nback,icols)*xdisp(icols) 117 | 200 continue 118 | 119 | 300 if (iffix(nback) == 0) xdisp(nback)=resid/pivot 120 | if (iffix(nback) == 1) xdisp(nback)=fixed(nback) 121 | if (iffix(nback) == 1) react(nback) = -resid 122 | 123 | 124 | 125 | 400 continue 126 | 127 | kount=0 128 | do ipoin=1,npoin 129 | do idofn=1,ndofn 130 | kount=kount+1 131 | gtdisp(ipoin,idofn)=xdisp(kount) 132 | gtreac(ipoin,idofn)=react(kount) 133 | end do 134 | end do 135 | 136 | print *, 'react=',react 137 | print *, 'disp=',xdisp 138 | 139 | 140 | 141 | ! asdis=xdisp 142 | gload=react 143 | asdis=xdisp 144 | ! print *,vec_residu 145 | ! stop 146 | end subroutine -------------------------------------------------------------------------------- /subroutines/conj_grad.f90: -------------------------------------------------------------------------------- 1 | program cong_grad 2 | 3 | double precision, dimension(:,:), allocatable :: A 4 | double precision, dimension(:), allocatable :: B, X 5 | 6 | integer :: i, j, n 7 | 8 | interface 9 | subroutine cg_method(A,B,X,n) 10 | double precision, dimension(:,:), allocatable :: A 11 | double precision, dimension(:), allocatable :: B, X 12 | end subroutine 13 | end interface 14 | 15 | n=3 16 | allocate(A(n,n)) 17 | allocate(B(n)) 18 | allocate(X(n)) 19 | 20 | do i=1,n 21 | X(i)=0.d0 22 | end do 23 | 24 | !do i=1,3 25 | !write(6,*) xx(i) 26 | !end do 27 | 28 | ! A(0,0)=110.d0 29 | ! A(0,1)=-30.d0 30 | ! A(0,2)=-30.d0 31 | ! A(1,1)=110.d0 32 | ! A(1,2)=50.d0 33 | ! A(2,2)=110.d0 34 | 35 | ! A(1,0)=a(0,1) 36 | ! A(2,0)=a(0,2) 37 | ! A(2,1)=a(1,2) 38 | 39 | ! B(0)=0.d0 40 | ! B(1)=0.d0 41 | ! B(2)=0.7d0 42 | 43 | 44 | A(1,1)=110.d0 45 | A(1,2)=-30.d0 46 | A(1,3)=-30.d0 47 | A(2,2)=110.d0 48 | A(2,3)=50.d0 49 | A(3,3)=110.d0 50 | 51 | A(2,1)=a(0,1) 52 | A(3,1)=a(0,2) 53 | A(3,2)=a(1,2) 54 | 55 | B(1)=0.d0 56 | B(2)=0.d0 57 | B(3)=0.7d0 58 | 59 | 60 | do i=1,3 61 | write(6,*) (A(i,j),j=1,3) 62 | end do 63 | 64 | do i=1,3 65 | write(6,*) (B(i)) 66 | end do 67 | 68 | call cg_method(A,B,X,n) 69 | 70 | print *,X 71 | end program 72 | 73 | 74 | ! -------------------------- MODULE cg.f90 ---------------------------- 75 | 76 | !************************************************************************ 77 | !* * 78 | !* Conjugate Gradient Method (CG Method) * 79 | !* ------------------------------------- * 80 | !* * 81 | !* Programming language: ANSI C * 82 | !* Compiler: Turbo C 2.0 * 83 | !* Computer: IBM PS/2 70 with 80387 * 84 | !* Sources: [BUNS85], [SCHW], [MAES84] * 85 | !* Author: Juergen Dietel, Computer Center, RWTH Aachen * 86 | !* Date: 7.31.1992 * 87 | !* * 88 | !* F90 version by J-P Moreau (without dynamic allocations). * 89 | !************************************************************************ 90 | Subroutine cg_method (A,B,X,nvlib)! & ! Conjugate Gradient Method 91 | !n, & ! Size of the linear system 92 | !a, & ! System matrix 93 | !y, & ! right hand side 94 | !x, & ! solution vector 95 | !fehler & ! error code 96 | !) 97 | double precision, dimension(:,:), allocatable :: A 98 | double precision, dimension(:), allocatable :: B, X 99 | ! original name: cg_verfahren() 100 | integer, parameter :: SIZE=24 101 | real*8, parameter :: ZERO=0.d0, MACH_EPS=2.d-10 102 | !real*8 a(0:SIZE,0:SIZE),x(0:SIZE),y(0:SIZE), delta(0:SIZE) 103 | integer fehler 104 | 105 | !************************************************************************ 106 | !* CG solves the linear system * 107 | !* A * X = Y * 108 | !* for a symmetric, positive definite matrix A via the conjugate * 109 | !* gradient method. * 110 | !* * 111 | !* Input parameters: * 112 | !* ================= * 113 | !* n Size of the linear system * 114 | !* a [0..n-1,0..n-1] system matrix A. Only the upper triangle of A is * 115 | !* used. * 116 | !* y [0..n-1] vector of the right hand side * 117 | !* * 118 | !* Output parameters: * 119 | !* ================== * 120 | !* x [0..n-1] vector giving the solution * 121 | !* * 122 | !* Return value: * 123 | !* ============= * 124 | !* = 0: all is ok * 125 | !* = 1: n < 2 or other disallowed input parameters * 126 | !* = 2: memory exceeded * 127 | !* * 128 | !************************************************************************ 129 | double precision d(nvlib), & ! (0..n-1) auxiliary vectors d and g 130 | g(nvlib), & 131 | AmalD(nvlib) ! (0..n-1) auxiliary vector A * d 132 | 133 | double precision alpha, & ! coefficient 134 | beta, & ! coefficient 135 | dividend, & ! numerator and denominator of a fraction 136 | divisor, & ! respectively, used to compute alpha, beta 137 | hilf, & ! auxiliary variables 138 | hilf2, & 139 | abstand, & ! distance of two successive approximations 140 | ! for the solution vector x (taken in the 141 | ! euclidean norm) 142 | xnorm ! euklidean norm of x 143 | integer k, i, j,n ! loop variables 144 | 145 | if (n < 2) then ! invalid parameter? 146 | fehler=1 147 | return 148 | end if 149 | n=nvlib 150 | 151 | 152 | !------------------------------------------------------------------ 153 | ! start with x at the origin 154 | !------------------------------------------------------------------ 155 | do i = n , 1, -1 156 | X(i) = ZERO 157 | end do 158 | 159 | !------------------------------------------------------------------ 160 | ! initialize d and g : 161 | ! d = -g = -(a*x - y) = y (since x = 0) 162 | !------------------------------------------------------------------ 163 | do i = n, 1, -1 164 | hilf = B(i) 165 | d(i) = hilf 166 | g(i) = -hilf 167 | end do 168 | 169 | 170 | !------------------------------------------------------------------ 171 | ! perform at most n steps of the CG Method 172 | !------------------------------------------------------------------ 173 | do k = n, 0, -1 174 | !---------------------------------------------------------------- 175 | ! compute new alpha: 176 | ! alpha = -(d(transp) * g) / (d(transp) * (a * d)) 177 | !---------------------------------------------------------------- 178 | 179 | dividend = ZERO 180 | divisor = ZERO 181 | 182 | do i = n, 1, -1 183 | dividend = dividend + d(i) * g(i) 184 | hilf = ZERO 185 | do j = 1, i-1 186 | hilf = hilf + A(j,i) * d(j) 187 | end do 188 | do j = i, n 189 | hilf = hilf + A(i,j) * d(j) 190 | end do 191 | AmalD(i) = hilf 192 | divisor = divisor + d(i) * hilf 193 | end do 194 | 195 | if (divisor.eq.ZERO) then 196 | fehler=0 197 | print *,'divisor=0' 198 | return 199 | end if 200 | 201 | alpha = -dividend / divisor 202 | 203 | !---------------------------------------------------------------- 204 | ! compute the norm of x und alpha * d and find a new x: 205 | ! x = x + alpha * d, then check whether x is close enough, 206 | ! in order to stop the process before n complete steps 207 | !---------------------------------------------------------------- 208 | xnorm = ZERO 209 | abstand = ZERO 210 | 211 | do i = n , 1, -1 212 | hilf = X(i) 213 | xnorm = xnorm + hilf*hilf 214 | hilf2 = alpha * d(i) 215 | abstand = abstand + hilf2*hilf2 216 | X(i) = hilf + hilf2 217 | end do 218 | 219 | if (abstand < MACH_EPS * xnorm) then 220 | fehler=0 221 | return 222 | end if 223 | 224 | 225 | !---------------------------------------------------------------- 226 | ! compute new g: g = g + alpha * (a * d) 227 | !---------------------------------------------------------------- 228 | do i = n, 1, -1 229 | g(i) = g(i) + alpha * AmalD(i) 230 | end do 231 | 232 | !---------------------------------------------------------------- 233 | ! compute new beta : 234 | ! beta = (g(transp) * (a * d)) / (d(transp) * (a * d)) 235 | !---------------------------------------------------------------- 236 | dividend = ZERO 237 | do i = n, 1, -1 238 | dividend = dividend + g(i) * AmalD(i) 239 | end do 240 | 241 | beta = dividend / divisor 242 | 243 | !---------------------------------------------------------------- 244 | ! compute new d : d = - g + beta * d 245 | !---------------------------------------------------------------- 246 | do i = n, 1, -1 247 | d(i) = -g(i) + beta * d(i) 248 | end do 249 | 250 | end do !k loop 251 | 252 | fehler=0 253 | return 254 | end 255 | -------------------------------------------------------------------------------- /subroutines/control.f90: -------------------------------------------------------------------------------- 1 | 2 | !************************************************************************* 3 | ! check1: this subroutine checks the main control data 4 | ! Owen p.200 5 | !************************************************************************** 6 | 7 | !subroutine check1(ndofn,nelem,ngaus,nmats,nnode,npoin,nstre,ntype,nvfix,ncrit,nalgo,nincs) 8 | subroutine check1( ) 9 | ! On verifie que tous les parametres d'entrée type nombre de noeuds, etc... sont corrects 10 | 11 | use variables 12 | 13 | implicit none 14 | 15 | integer :: ieror, keror 16 | 17 | 18 | do ieror=1,12 19 | neror(ieror)=0 20 | !read (*,'()') 21 | end do 22 | 23 | ! create the diagostic messages 24 | 25 | ! if ( npoin <= 0) neror(1)=1 26 | ! if ( nelem*nnode < npoin) neror(2)=1 27 | ! if ( nvfix < 2 .or. nvfix>npoin) neror(3)=1 28 | ! if ( nincs < 1) neror(4)=1 29 | ! if ( ntype < 1 .or. ntype > 3) neror(5)=1 30 | ! if ( nnode < 4 .or. nnode > 9) neror(6)=1 31 | ! if ( ndofn < 2 .or. ndofn > 6) neror(7)=1 32 | ! if ( nmats < 1 .or. nmats > nelem) neror(8)=1 33 | ! if ( ncrit < 1 .or. ncrit > 6) neror(9)=1 34 | ! if ( ngaus < 2 .or. ngaus > 3) neror(10)=1 35 | ! if ( nalgo < 1 .or. nalgo > 4) neror(11)=1 36 | ! if ( nstre < 3 .or. nstre > 5) neror(12)=1 37 | 38 | if ( npoin <= 0) neror(1)=1 39 | if ( nelem*nnode < npoin) neror(2)=1 40 | if ( nvfix < 2 .or. nvfix>npoin) neror(3)=1 41 | if ( nincs < 1) neror(4)=1 42 | if ( ntype < 1 .or. ntype > 3) neror(5)=1 43 | if ( nnode < 3 .or. nnode > 9) neror(6)=1 44 | if ( ndofn < 2 .or. ndofn > 6) neror(7)=1 45 | if ( nmats < 1 .or. nmats > nelem) neror(8)=1 46 | if ( ncrit < 1 .or. ncrit > 6) neror(9)=1 47 | if ( ngaus < 2 .or. ngaus > 3) neror(10)=1 48 | if ( nalgo < 1 .or. nalgo > 10) neror(11)=1 49 | if ( nstre < 3 .or. nstre > 5) neror(12)=1 50 | 51 | ! either return or else print the errors 52 | 53 | keror=0 !Indique si il y a un probleme dans les variables d'entrée si keror=1 54 | do ieror=1,12 55 | if(neror(ieror) /= 0) then 56 | keror=1 57 | write(6,900) ieror 58 | end if 59 | end do 60 | 61 | 900 format(//31h *** diagnosis by check1,error,i3) 62 | 63 | 64 | if (keror /= 0) then 65 | call echo() ! otherwise ech all the remaining data without further comment 66 | else 67 | return 68 | end if 69 | 70 | end 71 | 72 | 73 | !**************************************************************************** 74 | ! This subroutine checks the remainder of the input data Owen p.202 75 | ! Check geometric data, boundary conditions, and material properties 76 | !**************************************************************************** 77 | 78 | !subroutine check2(coord,iffix,lnods,matno,melem,mfron,mpoin,mtotv,mvfix,ndfro,ndofn,nelem,nmats,nnode,nofix,npoin,nvfix) 79 | 80 | subroutine check2( ) 81 | 82 | use variables 83 | 84 | implicit none 85 | 86 | 87 | integer :: kpoin, drap=0,ipoin,jpoin,idime, ielem 88 | integer :: i, idofn, ieror, inode, ivfix, jvfix, keror, kfron, klast 89 | integer :: kount, kstar, kvfix, kzero, nfron, nloca, nlast 90 | double precision :: sigma2 91 | 92 | 93 | ! check against two identical nonzero nodal coordinates 94 | do ieror=13,24 !A partir de 13 car c'est la suite de la subroutine check1 95 | neror(ieror)=0 96 | end do 97 | 98 | do ielem=1,nelem 99 | ndfro(ielem)=0 100 | end do 101 | 102 | 103 | !Verifie qu'il n'y pas des noeuds avec les même coordonnées ie tous les noeuds sont uniques 104 | 105 | !Version originale, meilleure sur le principe mais moins dans l'écriture 106 | ! do 40 ipoin=2,npoin 107 | ! kpoin=ipoin-1 108 | ! do 30 jpoin=1,kpoin 109 | ! do 20 idime=1,2 110 | ! if(coord(ipoin,idime) /= coord(jpoin,idime)) then 111 | ! goto 30 112 | ! end if 113 | ! 20 continue 114 | ! neror(13)=neror(13)+1 115 | ! 30 continue 116 | ! 40 continue 117 | 118 | 119 | do ipoin=2,npoin 120 | kpoin=ipoin-1 121 | do jpoin=1,kpoin 122 | drap=0 123 | do idime=1,ndim 124 | if ( coord(ipoin,idime) == coord(jpoin,idime) ) then 125 | drap=drap+1 126 | end if 127 | end do 128 | if (drap == ndim) then 129 | neror(13)=neror(13)+1 130 | end if 131 | end do 132 | end do 133 | 134 | 135 | 136 | 137 | !Check the list of element property numbers 138 | do ielem=1,nelem 139 | if(matno(ielem) <= 0.or.matno(ielem) > nmats) then 140 | neror(14)=neror(14)+1 141 | end if 142 | end do 143 | 144 | 145 | 146 | !Check for impossible node numbers 147 | do ielem=1,nelem 148 | do inode=1,nnode 149 | if(lnods(ielem,inode) == 0) then 150 | neror(15)=neror(15)+1 151 | end if 152 | if(lnods(ielem,inode) < 0 .or. lnods(ielem,inode) > npoin) then 153 | neror(16)=neror(16)+1 154 | end if 155 | end do 156 | end do 157 | 158 | 159 | !Check for any repetition of a node number within an element 160 | do ipoin=1,npoin 161 | kstar=0 162 | do ielem=1,nelem 163 | kzero=0 164 | do inode=1,nnode 165 | if(lnods(ielem,inode) /= ipoin) then 166 | cycle 167 | end if 168 | 169 | kzero=kzero+1 170 | 171 | if(kzero > 1) neror(17)=neror(17)+1 172 | ! Seek first, last and intermediate appearance of node ipoin 173 | if(kstar == 0) then 174 | kstar=ielem 175 | ! Calculate increase or decrease in frontwidth at each element stage... 176 | ndfro(ielem)=ndfro(ielem)+ndofn 177 | end if 178 | ! ... and change the signe of the last appearance of each node 179 | klast=ielem 180 | nlast=inode 181 | end do 182 | end do 183 | 184 | 185 | if(klast < nelem) then 186 | ndfro(klast+1)=ndfro(klast+1)-ndofn 187 | lnods(klast,nlast)=-ipoin 188 | cycle 189 | end if 190 | 191 | if(kstar == 0) then 192 | 193 | !Check that coordinates for an unused node have not been specified 194 | 195 | write(6,900) ipoin 196 | 900 format(/15h check why node,i4,14h never appears) 197 | neror(18)=neror(18)+1 198 | sigma2=0.0 199 | 200 | do idime=1,2 201 | sigma2=sigma2+abs(coord(ipoin,idime)) 202 | end do 203 | 204 | if(sigma2 /= 0.0) then 205 | neror(19)=neror(19)+1 206 | end if 207 | 208 | !Check that an unused node number is not restrained node 209 | 210 | do ivfix=1,nvfix 211 | if(nofix(ivfix) == ipoin) then 212 | neror(20)=neror(20)+1 213 | end if 214 | end do 215 | 216 | end if 217 | end do 218 | 219 | 220 | 221 | !Calculate the largest front width 222 | 223 | nfron=0 224 | kfron=0 225 | do ielem=1,nelem 226 | nfron=nfron+ndfro(ielem) 227 | if(nfron > kfron) then 228 | kfron=nfron 229 | end if 230 | end do 231 | 232 | 233 | 234 | write(6,905) kfron 235 | 905 format(//33h maximum frontwidth encountered =,i5) 236 | 237 | if(kfron > mfron) then 238 | neror(21)=1 239 | end if 240 | 241 | 242 | 243 | !Continue checking the data for the fixed values 244 | 245 | do ivfix=1,nvfix 246 | if(nofix(ivfix) <= 0 .or. nofix(ivfix) > npoin) then 247 | neror(22)=neror(22)+1 248 | end if 249 | kount=0 250 | nloca=(nofix(ivfix)-1)*ndofn 251 | 252 | do idofn=1,ndofn 253 | nloca=nloca+1 254 | if(iffix(nloca) > 0) then 255 | kount=1 256 | end if 257 | end do 258 | 259 | 260 | if(kount == 0) then 261 | neror(23)=neror(23)+1 262 | !write(6,*) ivfix 263 | end if 264 | kvfix=ivfix-1 265 | 266 | do jvfix=1,kvfix 267 | if(ivfix /= 1 .and. nofix(ivfix) == nofix(jvfix)) then 268 | neror(24)=neror(24)+1 269 | end if 270 | end do 271 | 272 | end do 273 | 274 | 275 | 276 | keror=0 277 | do ieror=13,24 278 | if(neror(ieror) == 0) then 279 | cycle 280 | end if 281 | keror=1 282 | write(6,910) ieror,neror(ieror) 283 | 910 format(//31h ***diagnosis by check2, error,i3,6x,18h associated number,i5) 284 | end do 285 | 286 | 287 | if(keror == 0) then 288 | !Return all nodal connections numbers to positive values 289 | do ielem=1,nelem 290 | do inode=1,nnode 291 | lnods(ielem,inode)=iabs(lnods(ielem,inode)) 292 | end do 293 | end do 294 | 295 | return 296 | end if 297 | 298 | if(keror /= 0) then 299 | call echo 300 | end if 301 | 302 | 303 | do i=1,1 304 | print *, " " !Mise en page de la sortie console 305 | print *, "Subroutine CHECK2 - Status: ERROR" 306 | print *, " " !Mise en page de la sortie console 307 | end do 308 | 309 | 310 | end 311 | !END CHECK2 312 | 313 | 314 | 315 | 316 | 317 | ! ************************************************************************ 318 | ! Subroutine echo Owen p.201 319 | ! if data errors have been detected by subroutines check1 or 320 | ! check2,this subroutine reads and writes the remaining data cards 321 | ! ************************************************************************** 322 | 323 | subroutine echo() 324 | 325 | dimension ntitl(80) 326 | print *, "INFORMATION PROVIDED BY SUBROUTINE ECHO" 327 | 328 | write(6,900) 329 | 900 format(//50h now follows a listing of post-disaster data cards/) 330 | 10 read(5,905) ntitl 331 | 905 format(80a1) 332 | write(6,910) ntitl 333 | 910 format(20x,80a1) 334 | goto 10 335 | 336 | end -------------------------------------------------------------------------------- /subroutines/geometry.f90: -------------------------------------------------------------------------------- 1 | 2 | !*********************************************************************************************** 3 | ! 4 | ! This file contains subroutines for geometry of the problem and boundaries conditions 5 | ! 6 | ! By Victor ROBIN - 09.06.2013, Exeter 7 | !********************************************************************************************** 8 | 9 | 10 | !********************************************************************************************** 11 | 12 | 13 | !*********************************************************************************************** 14 | ! This subroutine presets variables associated with dynamic dimensioning 15 | ! Owen p.238 16 | !********************************************************************************************** 17 | 18 | 19 | subroutine dimen( ) 20 | 21 | use variables 22 | 23 | !implicit double precision (a-h,o-z) 24 | implicit none 25 | integer :: num_example 26 | ! num_example=0: Example OWEN p.542 27 | ! num_example=1: 2 elements Q4 28 | ! num_example=2: 1 element Q4 29 | ! num_example=3: 2 elements T3 30 | ! num_example=4: 1 element Q8 31 | ! num_example=5: 4 elements Q8 32 | ! num_example=6: 4 elements Q8 + Distributed loading 33 | ! num_example=7: 4 elements Q8 + Deplacements imposes 34 | ! num_example=8: 1 element Q4 + Deplacements imposes - DOESN'T WORK 35 | ! num_example=9: 4 elements Q8 + Distributed loading - Axisymetry 36 | ! num_example=10: 4 elements Q8 + Point Load - AXIS 37 | ! num_example=11: 1 elements Q4 + Point Load - AXIS 38 | ! num_example=12: 2 elements T3 + Deplacements inposes 39 | ! num_example=13: 1 elements Q4 + Point Load - PLASTICITE PARFAITE 40 | ! num_example=14: 1 elements Q4 - PLASTICITE PARFAITE + Deplacements Imposes 41 | ! num_example=15: 2T3 + Deplacements Imposes - Calibration pour deplacements imposes 42 | ! num_example=16: 4Q4 - Plasticité parfaite 43 | ! num_example=17: 4Q4 - Plasticité parfaite - Deplacements imposés 44 | 45 | ! num_example=18: 1Q4 - Cam Clay 46 | ! num_example=19: 1Q4 - Cam Clay Lime Treated Soils 47 | 48 | num_example=18 49 | 50 | call initial_cond(num_example) 51 | 52 | 53 | return 54 | 55 | end 56 | 57 | 58 | 59 | !******************************************************************************* 60 | 61 | ! Subroutine input: this subroutine accepts most of the input data Owen p.208 62 | 63 | !******************************************************************************* 64 | 65 | subroutine input( ) 66 | 67 | use variables 68 | implicit none 69 | 70 | integer :: ipoin, idime, nb_tab_dyn, ivfix, ifpre, iprop, ielem, igaus 71 | integer :: i, j, idofn, ifdof, imats, istep, ngash, nloca, numat, numel, inode 72 | integer :: icompt, itotv 73 | 74 | real :: cond(mpoin,5) 75 | character (len=60) :: title 76 | 77 | include 'subroutines/interface.f90' 78 | 79 | ! If you want to print console output in a txt file 80 | ! open(unit=6,file='output_terminal.txt') !Writing of the variables values 81 | 82 | 83 | ! Create file to store element stiffness matrices 84 | open(unit=1,form='unformatted',file='temp/estif.tmp') 85 | 86 | !1 Lecture et ecriture du titre du fichier d'entree 87 | read(5,920) title 88 | write(6,920) title 89 | 920 format(a) 90 | 91 | ! Read the first data card, aand echo it immediately 92 | 93 | !2 Caracteristiques du maillage 94 | read(5,*) npoin,nelem,nvfix,ntype,nnode,nmats,ngaus,nalgo,ncrit,nincs,nstre !2 95 | 900 format(11i5) 96 | 97 | nevab=ndofn*nnode 98 | nstr1=nstre+1 99 | 100 | if(ntype == 3) then 101 | nstr1=nstre 102 | end if 103 | 104 | ntotv=npoin*ndofn 105 | ngaus2=ngaus*ngaus 106 | ntotg=nelem*ngaus2 107 | 108 | 109 | ! *** DYNAMIC ALLOCATION OF MEMORY **** 110 | include 'workspace/Alloc.f90' 111 | 112 | if (ncrit==5 .or. ncrit==6) then 113 | include 'workspace/Alloc_CamClay.f90' 114 | end if 115 | 116 | !! **** PARTIE COUPLAGE 117 | !3 Conditions initiales de saturation, indice des vides, etc... 118 | read(5,*) nstep,einitial,saturi,winitial,(amode(istep), istep=1,nstep) !3 119 | 120 | !4 Valeur amodel?? 121 | read(5,*) amodel !4 122 | 123 | !5 Valeurs liées à la discrétisation temporelle?? 124 | read(5,*) (iampl(i),aiso(i),tinstp(i),antsstp(i),aifreq(i),i=1,nstep) !5 125 | !! **** FIN PARTIE COUPLAGE 126 | 127 | 128 | 129 | 130 | write(6,901) npoin,nelem,nvfix,ntype,nnode,nmats,ngaus,nevab,nalgo,ncrit,nincs,nstre !2 131 | 901 format(//8h npoin =,i4,4x,8h nelem =,i4,4x,8h nvfix =,i4,4x, & 132 | 8h ntype =,i4,4x,8h nnode =,i4, & 133 | //8h nmats =,i4,4x,8h ngaus= ,i4, & 134 | 4x,8h nevab =,i4,4x,8h nalgo =,i4,4x, & 135 | //8h ncrit =,i4,4x,8h nincs =,i4,4x,8h nstre =,i4) 136 | 137 | 138 | !call check1(ndofn,nelem,ngaus,nmats,nnode,npoin,nstre,ntype,nvfix,ncrit,nalgo,nincs) 139 | call check1( ) 140 | 141 | ! On indique le type de problem: 142 | write(6,*) '' 143 | write(6,*) '--------------------------------------------' 144 | if (ntype==1) then 145 | write(6,*), "CALCUL CHARACTERISTICS: PLANE STRESS" 146 | end if 147 | 148 | if (ntype==2) then 149 | write(6,*) "CALCUL CHARACTERISTICS: PLANE STRAIN" 150 | end if 151 | 152 | if (ntype==3) then 153 | write(6,*) "CALCUL CHARACTERISTICS: AXISYMMETRIC PROBLEM" 154 | end if 155 | 156 | select case(ncrit) 157 | case(1) !ncrit=1: Tresca yield criterion 158 | write(6,*) "TRESCA" 159 | 160 | case(2) !ncrit=2: Von Mises 161 | write(6,*) "VON MISES" 162 | ! 163 | case(3) !ncrit=3: Mohr-Coulomb 164 | write(6,*) "MOHR-COULOMB" 165 | 166 | case(4) !ncrit=4: Drucker-Prager 167 | write(6,*) "DRUCKER-PRAGER" 168 | 169 | case(5) !ncrit=5: Cam-Clay 170 | write(6,*) "CAM CLAY" 171 | end select 172 | 173 | 174 | write(6,*) '--------------------------------------------' 175 | 176 | !Read the elements nodal connections and the property numbers 177 | write(6,902) !3 178 | 902 format(//8h element,3x,8hproperty,6x,12hnode numbers) 179 | 180 | do ielem=1,nelem 181 | read(5,*) numel,matno(numel),(lnods(numel,inode),inode=1,nnode) !6 182 | write(6,903) numel,matno(numel),(lnods(numel,inode),inode=1,nnode)!4 183 | end do 184 | 185 | 903 format(1x,i5,i9,6x,8i5) 186 | 187 | ! do i=1,numel 188 | ! write(6,*) (lnods(i,j),j=1,nnode) 189 | ! end do 190 | 191 | 192 | ! Set to zero all the nodal coordinates, prior to reading some of them 193 | do ipoin=1,npoin 194 | do idime=1,ndim 195 | coord(ipoin,idime)=0.0 196 | end do 197 | end do 198 | 199 | 200 | 201 | ! Read some nodal coordinates, finishing with the last node of all 202 | ! Numeros des noeuds + coord. dans ficher de sortie 203 | write(6,904) !5 204 | 904 format(//5h node,10x,1hx,10x,1hy) 205 | 206 | !7 Lecture des coordonnees 207 | do while (ipoin/=npoin) 208 | read(5,*) ipoin,(coord(ipoin,idime), idime=1,ndim) !7 209 | end do 210 | 211 | 905 format(i5,6f10.5) 212 | 213 | ! interpolate coordinates of mid-side nodes 214 | !call nodexy(coord,lnods,melem,mpoin,nelem,nnode) 215 | 216 | if (nnode>3) then 217 | call nodexy( ) 218 | end if 219 | 220 | 221 | do ipoin=1,npoin 222 | write(6,906) ipoin,(coord(ipoin,idime), idime=1,ndim) !6 223 | end do 224 | 225 | 906 format(1x,i5,3f10.4) 226 | 227 | 228 | 229 | !Read the fixed values 230 | write(6,907) !7 231 | ! original: write(6,*) !7 232 | 907 format(//5h node,6x,4hcode,6x,12h fixed values) 233 | 234 | 235 | ! Version Owen: presc au lieu de presc0 -> pour couplage 236 | ! ifpre: Restraint code: 237 | ! 10 Nodal displacement restrained in the x (or r) direction 238 | ! 01 Nodal displacement restrained in the y (or z) direction 239 | ! 11 Nodal displacement restrained in both coordinate direction 240 | ! 0 No boundary condition 241 | ! ifpre controls which degrees of freedom of a particualr node are to have a specified displacement value 242 | 243 | !*** Version Owen 244 | !do ivfix=1,nvfix 245 | ! read(5,908) nofix(ivfix),ifpre,(presc0(nofix(ivfix),idofn),idofn=1,ndofn) !8 246 | ! write(6,908) nofix(ivfix),ifpre,(presc0(nofix(ivfix),idofn),idofn=1,ndofn) !8 247 | ! nloca=(nofix(ivfix)-1)*ndofn ! Donne le numéro de ligne dans iffix de la premiere composante (selon x) du noeud nofix(ivfix) 248 | ! ifdof=10**(ndofn-1) !=10 249 | 250 | 251 | ! do idofn=1,ndofn 252 | ! ngash=nloca+idofn 253 | ! if(ifpre >= ifdof) then !si oui, ie ifpre>= 10 alors c'est bloqué selon x, si >=1, bloqué selon y 254 | ! iffix(ngash)=1 ! si =1, ca veut dire que ce noeud à une condition aux limites pour déplacements dans direction idofn 255 | ! ifpre=ifpre-ifdof 256 | ! end if 257 | ! ifdof=ifdof/10 !ifdof=1 258 | ! end do 259 | !end do 260 | !*** FIN Version Owen 261 | 262 | do itotv=1,ntotv 263 | iffix(itotv)=0 264 | end do 265 | 266 | !*** Version Victor pour 2D 267 | do ivfix=1,nvfix 268 | read(5,*) nofix(ivfix),ifpre,(presc0(ivfix,idofn),idofn=1,ndofn) !8 269 | write(6,908) nofix(ivfix),ifpre,(presc0(ivfix,idofn),idofn=1,ndofn) !8 270 | nloca=(nofix(ivfix)-1)*ndofn+1 ! Donne le numéro de ligne dans iffix de la premiere composante (selon x) du noeud nofix(ivfix) 271 | 272 | if (ifpre==10 .or. ifpre==11) then 273 | iffix(nloca)=1 274 | end if 275 | 276 | if (ifpre==01 .or. ifpre==11) then 277 | iffix(nloca+1)=1 278 | end if 279 | end do 280 | !*** FIN Version Victor 281 | 282 | 283 | 284 | 908 format(1x,i4,5x,i5,5x,f10.4,1x,f10.4) 285 | 286 | ! Read the available selection of element properties 287 | write(6,923) 288 | 923 format( //20hMaterials properties) 289 | 16 write(6,910) 290 | 910 format(6hNumber,6x,19h Element properties) 291 | 292 | 293 | do imats=1,nmats 294 | read(5,900) numat !9 295 | read(5,*)(props(numat,iprop),iprop=1,nprop) !10 296 | ! 930 format(8f10.5) 297 | write(6,*) numat,(props(numat,iprop),iprop=1,nprop) 298 | end do 299 | 300 | 301 | ! 911 format(1x,i4,3x,8e14.6) 302 | 303 | ! 911 format(8h Young =,f10.2,4x,11h Poisson = ,f4.2,4x,14h Thickness t = ,f3.1,4x, & 304 | ! 10h Density =,f5.1,4x,15h Sigma_y\c\py =,f7.2,4x,4h H =,f5.2,4x, & 305 | ! 6h phi =,f6.2/, & 306 | ! /6h v0 = ,f5.3,4x,10h Lambda = ,f6.4,4x,9h Kappa = ,f6.4,4x,5h M = ,f6.4) 307 | 308 | ! Version plus lisible: 911 format(1x,i4,3x,8f14.2) 309 | 310 | !911 format(//8h Young =,i4,4x,8h Poisson ratio =,i4,4x,8h Thickness t =,i4,4x, & 311 | ! 8h Density rho =,i4,4x,8h Sigma_y/Cohesion c =,i4, & 312 | ! //8h Hardening parameter =,i4,4x,8h Angle of friction phi (°)= ,i4) 313 | !911 format(//11h Materiau =,i4,4x,8h Young =,f5.2,8hPoisson=,4f5.2,4x,8hThickness,i4,4x) 314 | 315 | !write(6,*) props(1,:) 316 | 317 | 318 | 319 | ! ****** Version Elkassas 320 | ! 11 Read initial conditions 321 | !do j=1,npoin 322 | ! read(5,*) ipoin,(cond(ipoin,i),i=1,ndofn) !11 ATTENTION MODIFICATION de l'iterateur 323 | !end do 324 | 325 | !Put in vector of displacements 326 | !do ipoin=1,npoin 327 | ! do idofn=1,ndofn 328 | ! nloca=ndofn*(ipoin-1)+idofn 329 | ! asdis(nloca)=cond(ipoin,idofn) 330 | ! end do 331 | !end do 332 | ! ****** Fin Version Elkassas 333 | 334 | 335 | 336 | ! Set up gaussian integration constants 337 | 338 | !call gaussq(ngaus,posgp,weigp) 339 | call gaussq( ) 340 | 341 | 342 | !call check2(coord,iffix,lnods,matno,melem,mfron,mpoin,mtotv,mvfix,ndfro,ndofn,nelem,nmats,nnode,nofix,npoin,nvfix) 343 | call check2( ) 344 | 345 | 346 | ! On cherche le nombre de conditions aux limites, ie nombres de noeuds bloqués pour dimensionner ultérieurement rgstif, rgload 347 | ! D'abord on cherche le nombre de directions qui sont bloquées 348 | nnodefix=0 349 | do i=1,ntotv 350 | if (iffix(i)==1) then 351 | nnodefix=nnodefix+1 352 | end if 353 | end do 354 | 355 | ! Ensuite on regarde s'il y a des déplacements imposes 356 | ! do i=1,nvfix 357 | ! do j=1,ndim 358 | ! if (presc0(i,j)/=0.d0) then 359 | ! nnodefix=nnodefix-1 360 | ! end if 361 | ! end do 362 | ! end do 363 | 364 | ! On en déduit le nombre de noeuds libres = inconnues du systeme 365 | nvlib=ntotv-nnodefix 366 | allocate(gcoord(nvlib)) !Tableau 28 367 | 368 | 369 | return 370 | 371 | end 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | -------------------------------------------------------------------------------- /subroutines/input_data_GiD.f90: -------------------------------------------------------------------------------- 1 | subroutine input_data_GiD() 2 | 3 | 4 | use variables 5 | implicit none 6 | 7 | integer :: ipoin, idime, nb_tab_dyn, ivfix, ifpre, iprop, ielem, igaus 8 | integer :: i, j, idofn, ifdof, imats, istep, ngash, nloca, numat, numel, inode 9 | integer :: icompt, itotv 10 | 11 | ! real :: cond(mpoin,5) 12 | character (len=60) :: title 13 | character (len=60) :: atemp 14 | 15 | include 'subroutines/interface.f90' 16 | 17 | ! If you want to print console output in a txt file 18 | ! open(unit=6,file='output_terminal.txt') !Writing of the variables values 19 | 20 | 21 | ! Create file to store element stiffness matrices 22 | open(unit=1,form='unformatted',file='temp/estif.tmp') 23 | 24 | 25 | ! ******************************************* 26 | ! NAME OF THE .DAT FILE GENERATED BY GID 27 | ! ******************************************* 28 | open(5,file='PreProcessing/Triaxial.gid/Triaxial.dat') 29 | ! ******************************************* 30 | 31 | do i=1,16 32 | read(5,*) 33 | end do 34 | 35 | !Read main caracteristics of the geometry 36 | read(5,*) atemp,npoin 37 | read(5,*) atemp,nelem 38 | read(5,*) atemp,nvfix 39 | read(5,*) atemp,ntype 40 | read(5,*) atemp,nnode 41 | read(5,*) atemp,nmats 42 | read(5,*) atemp,ngaus 43 | read(5,*) atemp,nalgo 44 | read(5,*) atemp,ncrit 45 | read(5,*) atemp,nincs 46 | read(5,*) atemp,nstre 47 | read(5,*) atemp,ndim 48 | read(5,*) atemp,epsilon 49 | read(5,*) atemp,nstage 50 | 51 | !For mechanical use, only 2 degrees of freedom per node: X and Y 52 | ndofn=2 53 | 54 | nevab=ndofn*nnode 55 | nstr1=nstre+1 56 | 57 | if(ntype == 3) then 58 | nstr1=nstre 59 | end if 60 | 61 | ntotv=npoin*ndofn 62 | ngaus2=ngaus*ngaus 63 | ntotg=nelem*ngaus2 64 | 65 | 66 | !Number of Degrees Of Freedom per Node. =2: X et Y 67 | mfron=ndofn*npoin !Maximum front width 68 | 69 | mstif=(mfron*mfron-mfron)/2.0 +mfron 70 | 71 | 72 | 73 | !Number of material parameters required to define characteristics of a material completely 74 | !=4 for elasto-plastic problem; =2 for other applications; =11 for Cam Clay 75 | 76 | if (ncrit<=4) then 77 | nprop=7 78 | else if (ncrit==5) then 79 | nprop=11 80 | else if (ncrit==6) then 81 | nprop=16 82 | end if 83 | 84 | !On est tranquille et on peut mélanger plusieurs matériaux avec différents criteres 85 | ! nprop=11 86 | ! nprop=16 87 | 88 | ! *** DYNAMIC ALLOCATION OF MEMORY **** 89 | include 'workspace/Alloc.f90' 90 | 91 | if (ncrit==5 .or. ncrit==6) then 92 | include 'workspace/Alloc_CamClay.f90' 93 | end if 94 | 95 | 96 | write(6,901) npoin,nelem,nvfix,ntype,nnode,nmats,ngaus,nevab,nalgo,ncrit,nincs,nstre !2 97 | 901 format(//8h npoin =,i4,4x,8h nelem =,i4,4x,8h nvfix =,i4,4x, & 98 | 8h ntype =,i4,4x,8h nnode =,i4, & 99 | //8h nmats =,i4,4x,8h ngaus= ,i4, & 100 | 4x,8h nevab =,i4,4x,8h nalgo =,i4,4x, & 101 | //8h ncrit =,i4,4x,8h nincs =,i4,4x,8h nstre =,i4) 102 | 103 | !call check1(ndofn,nelem,ngaus,nmats,nnode,npoin,nstre,ntype,nvfix,ncrit,nalgo,nincs) 104 | call check1( ) 105 | 106 | ! On indique le type de problem: 107 | write(6,*) '' 108 | write(6,*) '--------------------------------------------' 109 | if (ntype==1) then 110 | write(6,*), "CALCUL CHARACTERISTICS: PLANE STRESS" 111 | end if 112 | 113 | if (ntype==2) then 114 | write(6,*) "CALCUL CHARACTERISTICS: PLANE STRAIN" 115 | end if 116 | 117 | if (ntype==3) then 118 | write(6,*) "CALCUL CHARACTERISTICS: AXISYMMETRIC PROBLEM" 119 | end if 120 | 121 | select case(ncrit) 122 | case(1) !ncrit=1: Tresca yield criterion 123 | write(6,*) "TRESCA" 124 | 125 | case(2) !ncrit=2: Von Mises 126 | write(6,*) "VON MISES" 127 | ! 128 | case(3) !ncrit=3: Mohr-Coulomb 129 | write(6,*) "MOHR-COULOMB" 130 | 131 | case(4) !ncrit=4: Drucker-Prager 132 | write(6,*) "DRUCKER-PRAGER" 133 | 134 | case(5) !ncrit=5: Cam-Clay 135 | write(6,*) "CAM CLAY" 136 | end select 137 | 138 | 139 | write(6,*) '--------------------------------------------' 140 | 141 | do i=1,5 142 | read(5,*) 143 | end do 144 | 145 | !------------------------------------ 146 | !Read connectivity table 147 | !------------------------------------ 148 | 149 | !Read the elements nodal connections and the property numbers 150 | write(6,902) !3 151 | 902 format(//8h element,3x,8hproperty,6x,12hnode numbers) 152 | 153 | 903 format(1x,i5,i9,6x,8i5) 154 | if (nnode==4) then 155 | do ielem=1,nelem 156 | read(5,*) numel,matno(numel),(lnods(numel,inode),inode=1,nnode) !6 157 | write(6,903) numel,matno(numel),(lnods(numel,inode),inode=1,nnode)!4 158 | end do 159 | end if 160 | 161 | if (nnode==8) then 162 | do ielem=1,nelem 163 | read(5,*) numel,matno(numel),lnods(numel,1) ,lnods(numel,3) ,lnods(numel,5) ,lnods(numel,7) ,lnods(numel,2), & 164 | & lnods(numel,4),lnods(numel,6),lnods(numel,8) !6 165 | write(6,903) numel,matno(numel),(lnods(numel,inode),inode=1,nnode)!4 166 | end do 167 | end if 168 | 169 | if (nnode==9) then 170 | do ielem=1,nelem 171 | read(5,*) numel,matno(numel),lnods(numel,1) ,lnods(numel,3) ,lnods(numel,5) ,lnods(numel,7) ,lnods(numel,2), & 172 | & lnods(numel,4),lnods(numel,6),lnods(numel,8),lnods(numel,9) !6 173 | write(6,903) numel,matno(numel),(lnods(numel,inode),inode=1,nnode)!4 174 | end do 175 | end if 176 | 177 | !------------------------------------ 178 | ! Read point coordinates 179 | !------------------------------------ 180 | do i=1,5 181 | read(5,*) 182 | end do 183 | 184 | ! Set to zero all the nodal coordinates, prior to reading some of them 185 | do ipoin=1,npoin 186 | do idime=1,ndim 187 | coord(ipoin,idime)=0.0 188 | end do 189 | end do 190 | 191 | 192 | 193 | ! Read some nodal coordinates, finishing with the last node of all 194 | ! Numeros des noeuds + coord. dans ficher de sortie 195 | write(6,904) !5 196 | 904 format(//5h node,10x,1hx,10x,1hy) 197 | 198 | 199 | !7 Lecture des coordonnees 200 | do while (ipoin/=npoin) 201 | read(5,*) ipoin,(coord(ipoin,idime), idime=1,ndim) !7 202 | write(6,906) ipoin,(coord(ipoin,idime), idime=1,ndim) !6 203 | end do 204 | 205 | 905 format(i5,6f10.5) 206 | 207 | ! interpolate coordinates of mid-side nodes 208 | !call nodexy(coord,lnods,melem,mpoin,nelem,nnode) 209 | 210 | if (nnode>3) then 211 | call nodexy( ) 212 | end if 213 | 214 | 215 | ! do ipoin=1,npoin 216 | ! write(6,906) ipoin,(coord(ipoin,idime), idime=1,ndim) !6 217 | ! end do 218 | 219 | 906 format(1x,i5,3f10.4) 220 | 221 | do i=1,5 222 | read(5,*) 223 | end do 224 | !------------------------------------ 225 | !Read materials properties 226 | !------------------------------------ 227 | ! Properties are ordered as follows: 228 | ! 1 - Young E 229 | ! 2 - Poisson 230 | ! 3 - Thickness 231 | ! 4 - Density 232 | ! 5 - Yield stress pyI/sigma_y/etc... 233 | ! 6 - Hardening parameter H' 234 | ! 7 - Friction angle phi 235 | ! 8 - Nlambda, specific volume of NCL at 1 kPa 236 | ! 9 - lambda, slope of NCL 237 | ! 10 - kappa, slope of URL 238 | ! 11 - M, slope of CSL 239 | ! 12 - pyII, secondary yield stress where degradation occurs 240 | ! 13 - beta, rate of degradation 241 | ! 14 - Dei, additional void ratio at p'=pyI (yield) 242 | ! 15 - Dec, residual void ratio at p'->+inf 243 | ! 16 - p'b, tensile strength due to cohesion 244 | 245 | ! Read the available selection of element properties 246 | write(6,923) 247 | 923 format( //20hMaterials properties) 248 | 16 write(6,910) 249 | 910 format(6hNumber,6x,19h Element properties) 250 | 251 | 252 | do imats=1,nmats 253 | read(5,*) numat,(props(numat,iprop),iprop=1,nprop) !10 254 | ! 930 format(8f10.5) 255 | write(6,*) numat,(props(numat,iprop),iprop=1,nprop) 256 | end do 257 | 258 | 259 | ! Set up gaussian integration constants 260 | !call gaussq(ngaus,posgp,weigp) 261 | call gaussq( ) 262 | 263 | 264 | 265 | 266 | 267 | 268 | return 269 | 270 | end 271 | -------------------------------------------------------------------------------- /subroutines/interface.f90: -------------------------------------------------------------------------------- 1 | interface 2 | subroutine cg_method(A,X,B,n) 3 | double precision, dimension(n,n) :: A 4 | double precision, dimension(n) :: B, X 5 | end subroutine 6 | 7 | subroutine disp_vec(v) 8 | double precision, dimension(:), allocatable :: v 9 | end subroutine 10 | 11 | subroutine disp_mat(t) 12 | double precision, dimension(:,:), allocatable :: t 13 | end subroutine 14 | end interface -------------------------------------------------------------------------------- /subroutines/numerical_analysis.f90: -------------------------------------------------------------------------------- 1 | 2 | !****************************************************************** 3 | ! Subroutine jacob2 - Owen p.182 4 | ! Calculates, for any sampling position (ksi_p,eta_p) (usually the gauss point) the following quantity: 5 | ! * The cartesian coordinates of the gauss point which are stored in the array gpcod() 6 | ! * The Jacobian matrix which is stored in xjcam() 7 | ! * The determinant of the Jacobian matrix, djacb 8 | ! * The inverse of the Jacobian matrix which is stored in xjaci() 9 | ! * The cartesian derivatives dNi/dx, dNi/dy (or dNi/dr, dNi/dz) of the element shape functions 10 | ! ******************************************************* 11 | 12 | !subroutine jacob2(xjacm,cartd,deriv,djacb,elcod,gpcod,ielem,kgasp,nnode,shap,cardc,cartdt,kgaus,gpcodg) 13 | !subroutine jacob2(ielem, kgasp) 14 | subroutine jacob2(ielem,kgasp) 15 | 16 | use variables 17 | 18 | implicit none 19 | 20 | integer :: idime, i, inode, j, jdime, kgasp, ielem 21 | 22 | 23 | 24 | !if (nnode>3) then 25 | ! calculate coordinates of sampling point 26 | ! Eq. 6.43 p. 171 27 | do idime=1,ndim 28 | gpcod(idime,kgasp)=0.d0 29 | do inode=1,nnode 30 | gpcod(idime,kgasp)=gpcod(idime,kgasp)+elcod(idime,inode)*shap(inode) 31 | end do 32 | end do 33 | 34 | ! print *,gpcod(1,kgasp),gpcod(2,kgasp) 35 | ! pause 36 | 37 | ! write(6,*) elcod 38 | ! write(6,*) shap 39 | ! stop 40 | !end if 41 | 42 | !if (nnode==3) then 43 | !do idime=1,ndim 44 | ! gpcod(idime,kgasp)=0.0 45 | ! do inode=1,nnode 46 | ! gpcod(idime,kgasp)=elcod(idime,inode) 47 | ! end do 48 | !end do 49 | ! 50 | !end if 51 | 52 | !do idime=1,2 53 | ! write(6,*) (gpcod(idime,inode),inode=1,1) 54 | !end do 55 | !stop 56 | 57 | 58 | ! kgaus=1 !ajouter par victor 59 | 60 | ! write(*,*) 'ok jacob2',kgaus, kgasp 61 | ! pause 62 | 63 | !do idime=1,2 64 | ! gpcodg(idime,kgaus)=gpcod(idime,kgasp) 65 | !end do 66 | 67 | 68 | 69 | !*** create jacobian matrix , xjacm 70 | ! 71 | do idime=1,2 72 | do jdime=1,2 73 | xjacm(idime,jdime)=0.d0 74 | do inode=1,nnode 75 | xjacm(idime,jdime)=xjacm(idime,jdime)+deriv(idime,inode)*elcod(jdime,inode) 76 | end do 77 | end do 78 | end do 79 | 80 | 81 | !*** calculates determinant and inverse of jacobian matrix 82 | djacb=xjacm(1,1)*xjacm(2,2)-xjacm(1,2)*xjacm(2,1) 83 | 84 | ! write(6,*) djacb 85 | ! stop 86 | 87 | if (djacb<0.d0) then 88 | write(6,600) ielem 89 | stop 90 | else if (djacb==0.d0) then 91 | write(6,600) ielem 92 | stop 93 | end if 94 | 95 | 600 format(//,36h programm halted in subroutin jacob2,/,10x,22h zero or negative area,/,10x,16h element number ,i5) 96 | 97 | xjaci(1,1)=xjacm(2,2)/djacb 98 | xjaci(2,2)=xjacm(1,1)/djacb 99 | xjaci(1,2)=-xjacm(1,2)/djacb 100 | xjaci(2,1)=-xjacm(2,1)/djacb 101 | 102 | !do idime=1,2 103 | ! write(6,*) (xjaci(idime,jdime),jdime=1,2) 104 | !end do 105 | !stop 106 | 107 | !*** calculate cartesian derivatives 108 | ! 109 | do idime=1,2 110 | do inode=1,nnode 111 | cartd(idime,inode)=0.d0 112 | do jdime=1,2 113 | cartd(idime,inode)=cartd(idime,inode)+xjaci(idime,jdime)*deriv(jdime,inode) 114 | end do 115 | end do 116 | end do 117 | 118 | ! do idime=1,ndim 119 | ! write(6,*) (cartd(idime,jdime),jdime=1,nnode) 120 | ! end do 121 | !stop 122 | 123 | 124 | ! change 5 125 | !do i=1,nnode 126 | ! do j=1,2 127 | ! cartdt(i,j)=cartd(j,i) 128 | ! end do 129 | !end do 130 | ! end of change 5 131 | 132 | 133 | 134 | 135 | !! store in a vector form 136 | !do j=1,nnode 137 | ! cardc(2*j-1,1)=cartd(1,j) 138 | ! cardc(2*j,1)=cartd(2,j) 139 | !end do 140 | 141 | return 142 | 143 | end 144 | 145 | 146 | 147 | 148 | ! ***************************************************************** 149 | ! This subroutine sets up the gauss-legendre integration constants Owen p.179 150 | ! Its function is to set up the sampling point positions and weighting factors for numerical integration. 151 | ! These processes are rectricted to either two or three point integration rules. cf. def. ngaus dans Module.f90 152 | ! ****************************************************************** 153 | 154 | !subroutine gaussq(ngaus,posgp,weigp) 155 | subroutine gaussq( ) 156 | 157 | use variables 158 | 159 | integer :: igash, kgaus 160 | !ngaus=2 avec exemple de Owen 161 | ! cf. http://fr.wikipedia.org/wiki/M%C3%A9thodes_de_quadrature_de_Gauss 162 | ! weigp: poids de l'interpolation 163 | ! posgp: Coordonnées des points du support pour l'interpolation 164 | 165 | 166 | 167 | !if (ngaus > 2) then 168 | ! posgp(1)=-0.77459666924148337703585307995648d0 ! = -(3/5)^(1/2) 169 | ! posgp(2)=0.d0 170 | ! weigp(1)=0.74535599249992989880305788957709d0 ! = 5/9 171 | ! weigp(2)=0.8888888888888889d0 ! = 8/9 172 | ! else ! ie if ngaus<=2 173 | ! posgp(1)=-0.9428090415820633658677924828065d0 !=-(1/3)^(1/2) 174 | ! weigp(1)=1.d0 175 | !end if 176 | 177 | if (ngaus == 3) then 178 | posgp(1)=-0.77459666924148337703585307995648d0 ! = -(3/5)^(1/2) 179 | posgp(2)=0.d0 180 | weigp(1)=0.55555555555555555555555555555556d0 ! = 5/9 181 | weigp(2)=0.8888888888888888888888888888889d0 ! = 8/9 182 | 183 | elseif (ngaus<=2) then! ie if ngaus<=2 184 | posgp(1)=-0.57735026918962576450914878050196d0 !=-(1/3)^(1/2) 185 | weigp(1)=1.d0 186 | end if 187 | 188 | 189 | 190 | kgaus=ngaus/2 191 | 192 | do igash=1,kgaus 193 | jgash=ngaus+1-igash 194 | posgp(jgash)=-posgp(igash) 195 | weigp(jgash)=weigp(igash) 196 | end do 197 | 198 | 199 | 200 | ! do igash=1,ngaus 201 | ! write(6,*) posgp(igash) 202 | ! end do 203 | ! stop 204 | 205 | 206 | 207 | 208 | 209 | return 210 | end 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | ! -------------------------- MODULE cg.f90 ---------------------------- 219 | 220 | !************************************************************************ 221 | !* * 222 | !* Conjugate Gradient Method (CG Method) * 223 | !* ------------------------------------- * 224 | !* * 225 | !* Programming language: ANSI C * 226 | !* Compiler: Turbo C 2.0 * 227 | !* Computer: IBM PS/2 70 with 80387 * 228 | !* Sources: [BUNS85], [SCHW], [MAES84] * 229 | !* Author: Juergen Dietel, Computer Center, RWTH Aachen * 230 | !* Date: 7.31.1992 * 231 | !* * 232 | !* F90 version by J-P Moreau (without dynamic allocations). * 233 | !************************************************************************ 234 | Subroutine cg_method (A,X,B,n)! & ! Conjugate Gradient Method 235 | !n, & ! Size of the linear system 236 | !a, & ! System matrix 237 | !y, & ! right hand side 238 | !x, & ! solution vector 239 | !fehler & ! error code 240 | !) 241 | integer n 242 | double precision, dimension(n,n) :: A 243 | double precision, dimension(n) :: B, X 244 | ! original name: cg_verfahren() 245 | integer, parameter :: SIZE=24 246 | double precision, parameter :: ZERO=0.d0, MACH_EPS=1.0d-15 247 | !real*8 a(0:SIZE,0:SIZE),x(0:SIZE),y(0:SIZE), delta(0:SIZE) 248 | integer fehler 249 | 250 | !************************************************************************ 251 | !* CG solves the linear system * 252 | !* A * X = Y * 253 | !* for a symmetric, positive definite matrix A via the conjugate * 254 | !* gradient method. * 255 | !* * 256 | !* Input parameters: * 257 | !* ================= * 258 | !* n Size of the linear system * 259 | !* a [0..n-1,0..n-1] system matrix A. Only the upper triangle of A is * 260 | !* used. * 261 | !* y [0..n-1] vector of the right hand side * 262 | !* * 263 | !* Output parameters: * 264 | !* ================== * 265 | !* x [0..n-1] vector giving the solution * 266 | !* * 267 | !* Return value: * 268 | !* ============= * 269 | !* = 0: all is ok * 270 | !* = 1: n < 2 or other disallowed input parameters * 271 | !* = 2: memory exceeded * 272 | !* * 273 | !************************************************************************ 274 | double precision d(n), & ! (0..n-1) auxiliary vectors d and g 275 | g(n), & 276 | AmalD(n) ! (0..n-1) auxiliary vector A * d 277 | 278 | double precision alpha, & ! coefficient 279 | beta, & ! coefficient 280 | dividend, & ! numerator and denominator of a fraction 281 | divisor, & ! respectively, used to compute alpha, beta 282 | hilf, & ! auxiliary variables 283 | hilf2, & 284 | abstand, & ! distance of two successive approximations 285 | ! for the solution vector x (taken in the 286 | ! euclidean norm) 287 | xnorm ! euklidean norm of x 288 | integer k, i, j ! loop variables 289 | 290 | if (n < 2) then ! invalid parameter? 291 | fehler=1 292 | print *,'n<2' 293 | return 294 | end if 295 | 296 | 297 | 298 | !------------------------------------------------------------------ 299 | ! start with x at the origin 300 | !------------------------------------------------------------------ 301 | do i = n , 1, -1 302 | X(i) = ZERO 303 | end do 304 | 305 | !------------------------------------------------------------------ 306 | ! initialize d and g : 307 | ! d = -g = -(a*x - y) = y (since x = 0) 308 | !------------------------------------------------------------------ 309 | do i = n, 1, -1 310 | hilf = B(i) 311 | d(i) = hilf 312 | g(i) = -hilf 313 | end do 314 | 315 | 316 | !------------------------------------------------------------------ 317 | ! perform at most n steps of the CG Method 318 | !------------------------------------------------------------------ 319 | do k = n, 0, -1 320 | !---------------------------------------------------------------- 321 | ! compute new alpha: 322 | ! alpha = -(d(transp) * g) / (d(transp) * (a * d)) 323 | !---------------------------------------------------------------- 324 | 325 | dividend = ZERO 326 | divisor = ZERO 327 | 328 | do i = n, 1, -1 329 | dividend = dividend + d(i) * g(i) 330 | hilf = ZERO 331 | do j = 1, i-1 332 | hilf = hilf + A(j,i) * d(j) 333 | end do 334 | do j = i, n 335 | hilf = hilf + A(i,j) * d(j) 336 | end do 337 | AmalD(i) = hilf 338 | divisor = divisor + d(i) * hilf 339 | end do 340 | 341 | if (divisor.eq.ZERO) then 342 | fehler=0 343 | ! print *,'divisor=0' 344 | return 345 | end if 346 | 347 | alpha = -dividend / divisor 348 | 349 | !---------------------------------------------------------------- 350 | ! compute the norm of x und alpha * d and find a new x: 351 | ! x = x + alpha * d, then check whether x is close enough, 352 | ! in order to stop the process before n complete steps 353 | !---------------------------------------------------------------- 354 | xnorm = ZERO 355 | abstand = ZERO 356 | 357 | do i = n , 1, -1 358 | hilf = X(i) 359 | xnorm = xnorm + hilf*hilf 360 | hilf2 = alpha * d(i) 361 | abstand = abstand + hilf2*hilf2 362 | X(i) = hilf + hilf2 363 | end do 364 | 365 | if (abstand < MACH_EPS * xnorm) then 366 | fehler=0 367 | return 368 | end if 369 | 370 | 371 | !---------------------------------------------------------------- 372 | ! compute new g: g = g + alpha * (a * d) 373 | !---------------------------------------------------------------- 374 | do i = n, 1, -1 375 | g(i) = g(i) + alpha * AmalD(i) 376 | end do 377 | 378 | !---------------------------------------------------------------- 379 | ! compute new beta : 380 | ! beta = (g(transp) * (a * d)) / (d(transp) * (a * d)) 381 | !---------------------------------------------------------------- 382 | dividend = ZERO 383 | do i = n, 1, -1 384 | dividend = dividend + g(i) * AmalD(i) 385 | end do 386 | 387 | beta = dividend / divisor 388 | 389 | !---------------------------------------------------------------- 390 | ! compute new d : d = - g + beta * d 391 | !---------------------------------------------------------------- 392 | do i = n, 1, -1 393 | d(i) = -g(i) + beta * d(i) 394 | end do 395 | 396 | end do !k loop 397 | 398 | fehler=0 399 | return 400 | end 401 | 402 | 403 | 404 | 405 | -------------------------------------------------------------------------------- /subroutines/output_deviator.f90: -------------------------------------------------------------------------------- 1 | !******************************************************************************* 2 | ! Subroutine output_python( ) 3 | ! This subroutine outputs displacements, reactions, and stresses 4 | !******************************************************************************* 5 | 6 | subroutine output_deviator( ) 7 | 8 | use variables 9 | implicit none 10 | 11 | integer :: koutp, ipoin, ngash, ngish, kelgs, istre, istr1, ivfix, idofn, igash, igaus, jgaus, kgaus 12 | integer :: ielem, inode,jdim, idime, lnode, knode, kshap, kgaus_rep 13 | double precision :: xgash, xgish, xgesh, xgosh 14 | double precision :: etasp, exisp,alpha_extrap, ksi, eta 15 | double precision :: s_xx, s_yy, s_xy, s_zz, varj2_triax, eps_a 16 | ! (strsg(istr1,kgaus),istr1=1,4) 17 | 18 | !We work on first gauss point to begin with 19 | s_xx=strsg(1,1) 20 | s_yy=strsg(2,1) 21 | s_xy=strsg(3,1) 22 | s_zz=strsg(4,1) 23 | 24 | !Calculate second deviatoric stress invariant J2' 25 | varj2_triax=s_xy*s_xy+0.5d0*(s_xx*s_xx + s_yy*s_yy + s_zz*s_zz) 26 | 27 | eps_a=defsg(1,1) 28 | 29 | open(unit=152,file='PostProcessing/Output/Deviatoric/deviatoric.txt') 30 | 31 | if (iincs==1) then 32 | write(152,*) "Increment eps_a varj2 sqrt(varj2)" 33 | end if 34 | write(152,*) iincs,eps_a*100.d0,varj2_triax,dsqrt(varj2_triax) 35 | 36 | 37 | end subroutine 38 | 39 | 40 | -------------------------------------------------------------------------------- /subroutines/output_vtk.f90: -------------------------------------------------------------------------------- 1 | subroutine output_vtk( ) 2 | use variables 3 | implicit none 4 | character(len=50) :: title_file, numfile_char,part4,part1, npoin_char, nelem_char,x_char, y_char, z_char, nelem_tot_char 5 | character(len=50) :: n1_c, n2_c, n3_c, n4_c, n5_c, n6_c, n7_c, n8_c, n9_c, nnode_char 6 | integer :: i, j, ipoin, ngash,ngish,igish,igash, nelem_tot 7 | double precision :: z=0.d0 8 | 9 | !http://people.sc.fsu.edu/~jburkardt/data/vtk/vtk.html 10 | !http://dunne.uni-hd.de/VisuSimple/documents/vtkfileformat.html 11 | 12 | !Creating name file 13 | part1='output/' 14 | title_file='output_vtk_' 15 | write(numfile_char,'(i10)') iincs 16 | part4='.vtk' 17 | 18 | ! Concatenation - trim supprime tous les espaces de fin 19 | title_file= trim(part1) // trim(title_file) // trim(numfile_char) // trim(part4) 20 | 21 | !Creating output file 22 | open(13,file=title_file) 23 | 24 | !Header 25 | write(13,900) '# vtk DataFile Version 1.0' 26 | write(13,900) 'Unstructured Grid Example' 27 | write(13,900) 'ASCII' 28 | 900 format(a) 29 | 30 | write(13,901) 'DATASET UNSTRUCTURED_GRID' 31 | 901 format(/a) 32 | 33 | !Pointdata 34 | !header 35 | write(npoin_char,'(i10)') npoin 36 | npoin_char=adjustl(npoin_char) 37 | write(13,910) trim(npoin_char) 38 | 910 format(7hPOINTS ,a,6h float) 39 | 40 | !Coordonnees 41 | z_char='0' 42 | do i=1,npoin 43 | write(x_char,'(f10.6)') coord(i,1) 44 | write(y_char,'(f10.6)') coord(i,2) 45 | write(z_char,'(f10.6)') z 46 | x_char=adjustl(x_char) 47 | y_char=adjustl(y_char) 48 | z_char=adjustl(z_char) 49 | write(13,920) trim(x_char), trim(y_char), trim(z_char) 50 | end do 51 | 920 format(a,1x,a,1x,a) 52 | 53 | 54 | !Celldata 55 | !header 56 | nelem_tot=nelem*(nnode+1) 57 | write(nelem_char,'(i10)') nelem 58 | write(nelem_tot_char,'(i10)') nelem_tot 59 | nelem_char=adjustl(nelem_char) 60 | nelem_tot_char=adjustl(nelem_tot_char) 61 | write(13,930) trim(nelem_char), trim(nelem_tot_char) 62 | 930 format(/6hCELLS ,a,1x,a) 63 | 64 | !Connectivity table 65 | write(nnode_char,'(i10)') nnode 66 | nnode_char=adjustl(nnode_char) 67 | 68 | do i=1,nelem 69 | 70 | ! write(n1_c,'(i10)') (iabs(lnods(i,1))-1) 71 | ! write(n2_c,'(i10)') (iabs(lnods(i,2))-1) 72 | ! write(n3_c,'(i10)') (iabs(lnods(i,3))-1) 73 | ! write(n4_c,'(i10)') (iabs(lnods(i,4))-1) 74 | ! write(n5_c,'(i10)') (iabs(lnods(i,5))-1) 75 | ! write(n6_c,'(i10)') (iabs(lnods(i,6))-1) 76 | ! write(n7_c,'(i10)') (iabs(lnods(i,7))-1) 77 | ! write(n8_c,'(i10)') (iabs(lnods(i,8))-1) 78 | ! if (nnode == 9) then 79 | ! write(n9_c,'(i10)') (iabs(lnods(i,9))-1) 80 | ! end if 81 | 82 | ! n1_c=adjustl(n1_c) 83 | ! n2_c=adjustl(n2_c) 84 | ! n3_c=adjustl(n3_c) 85 | ! n4_c=adjustl(n4_c) 86 | ! n5_c=adjustl(n5_c) 87 | ! n6_c=adjustl(n6_c) 88 | ! n7_c=adjustl(n7_c) 89 | ! n8_c=adjustl(n8_c) 90 | ! if (nnode == 9) then 91 | ! n9_c=adjustl(n9_c) 92 | ! end if 93 | select case (nnode) 94 | case (3) 95 | write(n1_c,'(i10)') (iabs(lnods(i,1))-1) 96 | write(n2_c,'(i10)') (iabs(lnods(i,2))-1) 97 | write(n3_c,'(i10)') (iabs(lnods(i,3))-1) 98 | n1_c=adjustl(n1_c) 99 | n2_c=adjustl(n2_c) 100 | n3_c=adjustl(n3_c) 101 | write(13,940) trim(nnode_char), trim(n1_c), trim(n2_c), trim(n3_c) 102 | 940 format(a,1x,a,1x,a,1x,a) 103 | 104 | case(4) 105 | write(n1_c,'(i10)') (iabs(lnods(i,1))-1) 106 | write(n2_c,'(i10)') (iabs(lnods(i,2))-1) 107 | write(n3_c,'(i10)') (iabs(lnods(i,3))-1) 108 | write(n4_c,'(i10)') (iabs(lnods(i,4))-1) 109 | n1_c=adjustl(n1_c) 110 | n2_c=adjustl(n2_c) 111 | n3_c=adjustl(n3_c) 112 | n4_c=adjustl(n4_c) 113 | write(13,944) trim(nnode_char), trim(n1_c), trim(n2_c), trim(n4_c), trim(n3_c) 114 | 944 format(a,1x,a,1x,a,1x,a,1x,a,1x) 115 | 116 | case(8) 117 | write(n1_c,'(i10)') (iabs(lnods(i,1))-1) 118 | write(n2_c,'(i10)') (iabs(lnods(i,2))-1) 119 | write(n3_c,'(i10)') (iabs(lnods(i,3))-1) 120 | write(n4_c,'(i10)') (iabs(lnods(i,4))-1) 121 | write(n5_c,'(i10)') (iabs(lnods(i,5))-1) 122 | write(n6_c,'(i10)') (iabs(lnods(i,6))-1) 123 | write(n7_c,'(i10)') (iabs(lnods(i,7))-1) 124 | write(n8_c,'(i10)') (iabs(lnods(i,8))-1) 125 | n1_c=adjustl(n1_c) 126 | n2_c=adjustl(n2_c) 127 | n3_c=adjustl(n3_c) 128 | n4_c=adjustl(n4_c) 129 | n5_c=adjustl(n5_c) 130 | n6_c=adjustl(n6_c) 131 | n7_c=adjustl(n7_c) 132 | n8_c=adjustl(n8_c) 133 | write(13,941) trim(nnode_char), trim(n1_c), trim(n3_c), trim(n5_c), trim(n7_c), & 134 | & trim(n2_c), trim(n4_c), trim(n6_c), trim(n8_c) 135 | 941 format(a,1x,a,1x,a,1x,a,1x,a,1x,a,1x,a,1x,a,1x,a) 136 | 137 | end select 138 | end do 139 | 140 | 141 | !nnode=nombre de noeuds par elements 142 | !lnods=table de connectivité (ligne 1=element 1, ligne 2=element 2, etc...) 143 | !nelem=nombre d'elements total dans la structure 144 | !npoin=nombre total de points dans la structure 145 | !coord=coordonnées des points (attention ici c'est en 2D) 146 | !ndim=nombre de dimensions 147 | 148 | 149 | !Cell_Type 150 | !header 151 | write(13,950) trim(nelem_char) 152 | 950 format(/11hCELL_TYPES ,a) 153 | 154 | select case (nnode) 155 | case(3) 156 | do i=1,nelem 157 | write(13,'(a)') '5' 158 | end do 159 | 160 | case(4) 161 | do i=1,nelem 162 | write(13,'(a)') '8' 163 | end do 164 | 165 | case(8) 166 | do i=1,nelem 167 | write(13,'(a)') '23' 168 | end do 169 | end select 170 | 171 | ! Point data 172 | !header 173 | write(13,970) trim(npoin_char) 174 | 970 format(/11hPOINT_DATA ,a) 175 | write(13,'(a)') 'SCALARS Fx float' 176 | write(13,'(a)') 'LOOKUP_TABLE default' 177 | 178 | do ipoin=1,npoin 179 | ngash=ipoin*2 180 | ngish=ngash-2+1 181 | 182 | write(x_char,'(f12.6)') tofor(ngish) 183 | write(y_char,'(f10.6)') tofor(ngash)*100 184 | write(z_char,'(f10.6)') z 185 | 186 | x_char=adjustl(x_char) 187 | y_char=adjustl(y_char) 188 | z_char=adjustl(z_char) 189 | 190 | write(13,920) trim(y_char)!, trim(y_char), trim(z_char) 191 | !write(13,*) (tdisp(igash),igash=ngish,ngash),0.0 192 | end do 193 | 194 | 195 | 196 | close(13) 197 | end 198 | -------------------------------------------------------------------------------- /subroutines/plasticity.f90: -------------------------------------------------------------------------------- 1 | !****************************************************** 2 | ! 3 | ! This file contains subroutines used for plasticity 4 | ! 5 | !****************************************************** 6 | 7 | 8 | ! ********************************************************************** 9 | ! Subroutine invar - Owen p. 239 10 | ! This subroutine evaluates the stress invariants and the current value of 11 | ! the yield function 12 | ! *********************************************************************** 13 | 14 | subroutine invar(lprop,stemp) 15 | 16 | use variables 17 | implicit none 18 | 19 | double precision, dimension(4) :: stemp 20 | double precision :: varj1 21 | integer :: lprop 22 | 23 | ! write(6,*) 'stemp dans invar',stemp 24 | ! stop 25 | 26 | 27 | ! First invariant I1=Tr(sigma) 28 | I1=stemp(1)+stemp(2)+stemp(4) 29 | smean=(stemp(1)+stemp(2)+stemp(4))/3.d0 30 | 31 | !Compute deviatoric stresses according to (7.7): s=sigma -(1/3)*I1 32 | devia(1)=stemp(1)-smean ! sigma_xx 33 | devia(2)=stemp(2)-smean ! sigma_yy 34 | devia(3)=stemp(3) ! sigma_xy 35 | devia(4)=stemp(4)-smean ! sigma_ZZ 36 | 37 | 38 | !On vérifie qu'il n'y a pas d'incohérences dans le tenseur déviatorique 39 | !We check there are no inconstitencies with the deviatoric tensor, i.e. if J1=0 (First deviatoric stress invariant J1') 40 | varj1=devia(1)+devia(2)+devia(4) 41 | 42 | ! write(6,*) "smean, devia(1),devia(2),devia(3),devia(4)=" 43 | ! write(6,*) smean,devia(1),devia(2),devia(3),devia(4) 44 | !stop 45 | 46 | ! if (abs(varj1) > 1.d-8) then 47 | if (abs(varj1) > epsilon) then 48 | write(6,*) 'Error in the deviatoric stress tensor: J1 ≠ 0 =', varj1 49 | stop 50 | end if 51 | ! End test 52 | 53 | !Calculate second deviatoric stress invariant J2' 54 | varj2=devia(3)*devia(3)+0.5d0*(devia(1)*devia(1) + devia(2)*devia(2) + devia(4)*devia(4)) 55 | ! write(6,*) "varj2=",varj2 56 | 57 | !Calculate third deviatoric stress invariant J3' 58 | varj3=devia(4)*(devia(4)*devia(4)-varj2) 59 | 60 | !Compute √(J2') 61 | steff=dsqrt(varj2) 62 | 63 | if (steff == 0.d0) go to 10 64 | sint3=-3.d0*root3*varj3/(2.d0*varj2*steff) 65 | if(sint3.GT.1.d0) sint3=1.d0 66 | go to 20 67 | 10 sint3=0.d0 68 | 20 continue 69 | if(sint3.LT.-1.d0) then 70 | sint3=-1.d0 71 | end if 72 | 73 | if(sint3.GT.1.d0) then 74 | sint3=1.d0 75 | end if 76 | theta=dasin(sint3)/3.d0 77 | 78 | 79 | ! Evaluate yield function according to the criterion 80 | select case(ncrit) 81 | case(1) !ncrit=1: Tresca yield criterion 82 | yield=2.d0*dcos(theta)*steff 83 | return 84 | case(2) !ncrit=2: Von Mises 85 | yield=root3*steff 86 | ! print *,"yield=",yield 87 | return 88 | case(3) !ncrit=3: Mohr-Coulomb 89 | phira=props(lprop,7)*degres 90 | snphi=dsin(phira) 91 | yield=smean*snphi+steff*(dcos(theta)-dsin(theta)*snphi/root3) 92 | return 93 | case(4) !ncrit=4: Drucker-Prager 94 | phira=props(lprop,7)*degres 95 | snphi=dsin(phira) 96 | yield=6.d0*smean*snphi/(root3*(3.d0-snphi))+steff 97 | return 98 | case(5) !ncrit=5: Cam-Clay 99 | csl=props(lprop,11) 100 | ! yield=(3.d0*varj2/(smean*csl*csl))+smean 101 | yield=-(I1/3.d0)-(9.d0*varj2)/(I1*csl*csl) 102 | ! print *,'yield ss=',yield 103 | return 104 | !Change 44 105 | case(6) !ncrit=6: Lime treated soils 106 | ! q=1.732050808*steff 107 | csl=props(lprop,11) 108 | pb=props(lprop,16) 109 | yield=-(I1/3.d0)-(9.d0*varj2)/((I1+3.d0*pb)*csl*csl) 110 | end select 111 | 112 | 113 | end 114 | 115 | !******************************************************************** 116 | ! Subroutine yieldf - Owen p.241 117 | ! This subroutine evaluates the flow vector a defined in (7.74) 118 | !******************************************************************** 119 | 120 | subroutine yieldf(lprop,kgaus) 121 | 122 | use variables 123 | 124 | implicit none 125 | 126 | integer :: istr1, lprop, kgaus 127 | 128 | 129 | if(steff == 0.d0) then 130 | return 131 | end if 132 | 133 | 134 | frict=props(lprop,7) 135 | ! snphi=dsin(frict*degres) ! ? 136 | tanth=dtan(theta) 137 | tant3=dtan(3.d0*theta) 138 | sinth=dsin(theta) 139 | costh=dcos(theta) 140 | cost3=dcos(3.d0*theta) 141 | !root3=1.73205080757 142 | 143 | ! Calculate vector a1 144 | 145 | veca1(1)=1.d0 146 | veca1(2)=1.d0 147 | veca1(3)=0.d0 148 | veca1(4)=1.d0 149 | 150 | ! Calculate vector a2 151 | 152 | do istr1=1,nstr1 153 | veca2(istr1)=devia(istr1)/(2.d0*steff) 154 | end do 155 | 156 | veca2(3)=devia(3)/steff 157 | 158 | ! Calculate vector a3 159 | 160 | veca3(1)=devia(2)*devia(4)+varj2/3.d0 161 | veca3(2)=devia(1)*devia(4)+varj2/3.d0 162 | veca3(3)=-2.d0*devia(3)*devia(4) 163 | veca3(4)=devia(1)*devia(2)-devia(3)*devia(3)+varj2/3.d0 164 | 165 | select case(ncrit) 166 | case(1) ! ncrit=1: Tresca 167 | cons1=0.d0 168 | abthe=dabs(theta*radian) 169 | if(abthe >= 29.d0) then 170 | cons2=root3 171 | cons3=0.d0 172 | end if 173 | 174 | if(abthe < 29.d0) then 175 | cons2=2.d0*(costh+sinth*tant3) 176 | cons3=root3*sinth/(varj2*cost3) 177 | end if 178 | 179 | case(2) ! ncrit=2: Von Mises 180 | cons1=0.d0 181 | cons2=root3 182 | cons3=0.d0 183 | 184 | case(3) ! ncrit=3: Mohr-Coulomb 185 | cons1=dsin(frict*degres)/3.d0 186 | abthe=dabs(theta*radian) 187 | 188 | 189 | if(abthe.LT.29.d0) go to 30 190 | cons3=0.d0 191 | plumi=1.d0 192 | if (theta.GT.0.d0) plumi=-1.d0 193 | cons2=0.5*(root3+plumi*cons1*root3) 194 | go to 40 195 | 30 cons2=costh*((1.d0+tanth*tant3)+cons1*(tant3-tanth)*root3) 196 | cons3=(root3*sinth+3.d0*cons1*costh)/(2.d0*varj2*cost3) 197 | go to 40 198 | 199 | case(4) ! ncrit=4: Drucker-Prager 200 | snphi=dsin(frict*degres) 201 | cons1=2.d0*snphi/(root3*(3.d0-snphi)) 202 | cons2=1.d0 203 | cons3=0.d0 204 | 205 | case(5) ! ncrit=5: Cam Clay 206 | ! 207 | cons1=(1.d0/9.d0)*(2.d0*I1+3.d0*yieldgp(kgaus)) 208 | ! print *,"iincs=",iincs,'kgaus=',kgaus,'yieldgp=',yieldgp(kgaus) 209 | cons2=(6.d0*steff)/(csl*csl) 210 | cons3=0.d0 211 | case(6) ! ncrit=6: MASS 212 | cons1=(1.d0/9.d0)*(2.d0*I1+3.d0*(yieldgp(kgaus)+pb)) 213 | ! print *,"iincs=",iincs,'kgaus=',kgaus,'yieldgp=',yieldgp(kgaus) 214 | cons2=(6.d0*steff)/(csl*csl) 215 | cons3=0.d0 216 | 217 | end select 218 | 219 | 40 continue 220 | do istr1=1,nstr1 221 | avect(istr1)=cons1*veca1(istr1)+cons2*veca2(istr1)+cons3*veca3(istr1) 222 | end do 223 | 224 | return 225 | end 226 | 227 | 228 | ! ********************************************************************* 229 | ! Subroutine flowpl - Owen p.243 230 | ! This subroutine evaluates the plastic d vector. 231 | ! *********************************************************************** 232 | 233 | 234 | subroutine flowpl(lprop,kgaus) 235 | 236 | use variables 237 | 238 | implicit none 239 | 240 | integer :: istr1, lprop, kgaus 241 | 242 | double precision :: denom, fmul1, fmul2, fmul3, hards, part1, part2, part3, pyIIo,betas 243 | 244 | 245 | young=props(lprop,1) 246 | poiss=props(lprop,2) 247 | hards=props(lprop,6) 248 | 249 | 250 | fmul1=young/(1.d0+poiss) 251 | 252 | if (ntype == 2 .or. ntype == 3) then 253 | !Plane strain: ntype = 2 / Axial symmetry: ntype = 3 254 | fmul2=young*poiss*(avect(1)+avect(2)+avect(4))/((1.d0+poiss)*(1.d0-2.d0*poiss)) 255 | dvect(1)=fmul1*avect(1)+fmul2 256 | dvect(2)=fmul1*avect(2)+fmul2 257 | dvect(3)=0.5d0*avect(3)*young/(1.d0+poiss) 258 | dvect(4)=fmul1*avect(4)+fmul2 259 | else 260 | !Plane stress: ntype = 1 261 | fmul3=young*poiss*(avect(1)+avect(2))/(1.d0-poiss*poiss) 262 | dvect(1)=fmul1*avect(1)+fmul3 263 | dvect(2)=fmul1*avect(2)+fmul3 264 | dvect(3)=0.5d0*avect(3)*young/(1.d0+poiss) 265 | dvect(4)=fmul1*avect(4)+fmul3 266 | end if 267 | 268 | 269 | ! Compute 1/(H'+dvect*avect) for later evaluation of the elasto-plastic matrix Dep 270 | ! /!\ matrix D is constant in this version, ie not re-evaluated even if yield occured 271 | 272 | !For Cam Clay, hards correspond au parametre A et n'est pas constant -> A CALCULER 273 | 274 | if (ncrit/=5) then 275 | 70 denom=hards 276 | end if 277 | 278 | if (ncrit==5) then 279 | denom = ( yieldgp(kgaus)*volspegp(kgaus)*I1*( 3.d0*yieldgp(kgaus)+2.d0*I1) )/( 9.d0*(CCkappa-CClambda) ) 280 | end if 281 | 282 | !Model MASS 283 | if (ncrit==6) then 284 | part1 = volspegp(kgaus)*(I1+3.d0*pb)*(2.d0*I1 + 3.d0*(yieldgp(kgaus)+pb)) 285 | part2 = exp(beta*yieldgp(kgaus))*beta*(exp(pyI*beta) + exp(pyII*beta))*(Dec-Dei) 286 | part3 = (exp(yieldgp(kgaus)*beta)+exp(pyII*beta))*(exp(yieldgp(kgaus)*beta)+exp(pyII*beta)) 287 | denom = part1/( 9.d0*( -(part2/part3) + (CClambda-CCkappa)/yieldgp(kgaus)) ) 288 | end if 289 | 290 | 291 | do istr1=1,nstr1 292 | denom=denom+avect(istr1)*dvect(istr1) 293 | end do 294 | 295 | abeta=1.d0/denom 296 | 297 | 298 | return 299 | end 300 | 301 | -------------------------------------------------------------------------------- /subroutines/validation.f90: -------------------------------------------------------------------------------- 1 | 2 | 3 | subroutine outputvalidationCC( ) 4 | 5 | use variables 6 | implicit none 7 | 8 | ! integer :: koutp, ipoin, ngash, ngish, kelgs, istre, istr1, ivfix, idofn, igash, igaus, jgaus, kgaus 9 | ! integer :: ielem, inode,jdim, idime, lnode, knode, kshap, kgaus_rep,i 10 | double precision :: p_eff_mean,temp,q_devia, depspp 11 | 12 | ! double precision :: etasp, exisp,alpha_extrap, ksi, eta 13 | 14 | integer :: num_gaus 15 | 16 | double precision, dimension(4) :: deviateur 17 | ! double precision, dimension(npoin) :: yield_node,spe_vol_node,epstnp_node,deviatoric_stress_node,effective_mean_stress_node 18 | 19 | ! character(len=200) :: filename,part4,part1, numfile_char,npoin_char, nelem_char,x_char, y_char, z_char, nelem_tot_char 20 | 21 | !----------------------------------------------------------------------------------------- 22 | !Write cam clay parameters 23 | !----------------------------------------------------------------------------------------- 24 | if (istage==1 .and. iincs==nincs) then 25 | open(unit=133,file='PostProcessing/Output/Validation_CamClay/para_camclay.txt') 26 | write(133,*) 'Nkappa Nlambda lambda kappa M py pi ' 27 | write(133,*) Nkappa,Nlambda,CClambda,CCkappa,csl,props(1,5),strsg(1,1) 28 | close(133) 29 | end if 30 | 31 | !----------------------------------------------------------------------------------------- 32 | !Write axial displacement, specific volume, effective mean stress, and deviatoric stress 33 | !----------------------------------------------------------------------------------------- 34 | if (istage==1 .and. iincs==1) then 35 | open(unit=132,file='PostProcessing/Output/Validation_CamClay/validation_camclay.txt') 36 | write(132,*) 'p q Eps_a v' 37 | end if 38 | 39 | ! we choose gauss point number 40 | num_gaus=1 41 | 42 | ! strsg(istr1,kgaus) 43 | 44 | depspp=epstnp(num_gaus)-epstnp_pre(num_gaus) 45 | 46 | epstnp_pre=epstnp 47 | 48 | p_eff_mean=(strsg(1,num_gaus)+strsg(2,num_gaus)+strsg(4,num_gaus))/3.d0 49 | 50 | ! print *, (strsg(i,num_gaus),i=1,4) 51 | !Compute deviatoric stresses according to (7.7): s=sigma -(1/3)*I1 52 | deviateur(1)=strsg(1,num_gaus)-p_eff_mean ! sigma_xx / rr 53 | deviateur(2)=strsg(2,num_gaus)-p_eff_mean ! sigma_yy / zz 54 | deviateur(3)=strsg(3,num_gaus) ! sigma_xy / rz 55 | deviateur(4)=strsg(4,num_gaus)-p_eff_mean ! sigma_ZZ / tt 56 | 57 | 58 | !Calculate second deviatoric stress invariant J2' 59 | temp=deviateur(3)*deviateur(3)+0.5d0*(deviateur(1)*deviateur(1) + deviateur(2)*deviateur(2) + deviateur(4)*deviateur(4)) 60 | q_devia=dsqrt(3.d0*temp) 61 | ! print *, p_eff_mean,dsqrt(3.d0*varj22),volspegp(num_gaus) 62 | 63 | ! if (ntype==3) then 64 | ! print *,p_eff_mean,q_devia,defsg(2,num_gaus), volspegp(num_gaus) 65 | ! end if 66 | 67 | write(132,*) p_eff_mean,q_devia,defsg(2,num_gaus), volspegp(num_gaus),depspp 68 | ! end if 69 | 70 | ! write(1304,*) istage,istage,iincs,iincs 71 | return 72 | 73 | end subroutine -------------------------------------------------------------------------------- /subroutines/zonetest_sub.f90: -------------------------------------------------------------------------------- 1 | subroutine affiche(t) 2 | 3 | implicit none 4 | integer, dimension(:,:), allocatable :: t 5 | integer :: i, j, n 6 | 7 | interface 8 | subroutine affiche2(t) 9 | integer, dimension(:,:), allocatable :: t 10 | end subroutine 11 | end interface 12 | 13 | 14 | do i=1,size(t,1) 15 | print '(1x,160i5)', t(i,:) 16 | end do 17 | 18 | 19 | end subroutine 20 | 21 | subroutine affiche2(t) 22 | 23 | implicit none 24 | integer, dimension(:,:), allocatable :: t 25 | integer :: i, j, n 26 | 27 | do i=1,size(t,1) 28 | print '(1x,160i5)', t(i,:) 29 | end do 30 | 31 | 32 | end subroutine 33 | 34 | subroutine zero(t,nblignes,nbcol) 35 | 36 | implicit none 37 | integer, dimension(nblignes,nbcol) :: t 38 | integer :: i, j, n,nbcol,nblignes 39 | 40 | 41 | do i=1,nblignes 42 | do j=1,nbcol 43 | t(i,j)=0.d0 44 | end do 45 | end do 46 | 47 | return 48 | end subroutine 49 | 50 | -------------------------------------------------------------------------------- /workspace/Alloc.f90: -------------------------------------------------------------------------------- 1 | ! *** Zone des ALLOCATIONS DYNAMIQUES DE MEMOIRE **** 2 | 3 | compt_alloc=0 4 | nb_tab_dyn=136 5 | allocate( alloc_stat(nb_tab_dyn)) !Tableau pour sauvegarde resultats des allocations. 6 | 7 | allocate( matno(nelem), stat = alloc_stat(compt_alloc+1)) !Tableau 1 8 | allocate( coord(npoin,ndim), stat = alloc_stat(compt_alloc+2)) !Tableau 2 9 | allocate( lnods(nelem,nnode), stat = alloc_stat(compt_alloc+3)) !Tableau 3 10 | allocate( presc0(nvfix,ndofn), stat = alloc_stat(compt_alloc+4)) !Tableau 4 11 | allocate( iffix(ntotv), stat = alloc_stat(compt_alloc+5)) !Tableau 5 12 | allocate( nofix(nvfix), stat = alloc_stat(compt_alloc+6)) !Tableau 6 13 | allocate( props(nmats,nprop), stat = alloc_stat(compt_alloc+7)) !Tableau 7 14 | allocate( ndfro(nelem), stat = alloc_stat(compt_alloc+8)) !Tableau 8 15 | allocate( asdis(ntotv), stat = alloc_stat(compt_alloc+9)) !Tableau 9 16 | allocate( rload(nelem,nevab), stat = alloc_stat(compt_alloc+10)) !Tableau 10 17 | allocate( gradb(npoin,4), stat = alloc_stat(compt_alloc+11)) !Tableau 11 18 | allocate( ngrad(nelem,4), stat = alloc_stat(compt_alloc+12)) !Tableau 12 19 | allocate( delz(npoin), stat = alloc_stat(compt_alloc+13)) !Tableau 13 20 | allocate( eload(nelem,nevab), stat = alloc_stat(compt_alloc+14)) !Tableau 14 21 | allocate( tload(nelem,nevab), stat = alloc_stat(compt_alloc+15)) !Tableau 15 22 | allocate( tdisp(ntotv), stat = alloc_stat(compt_alloc+16)) !Tableau 16 23 | allocate( treac(nvfix,ndofn), stat = alloc_stat(compt_alloc+17)) !Tableau 17 24 | allocate( epstn(ntotg), stat = alloc_stat(compt_alloc+18)) !Tableau 18 25 | allocate( effst(ntotg), stat = alloc_stat(compt_alloc+19)) !Tableau 19 26 | allocate( strsg(nstr1,ntotg), stat = alloc_stat(compt_alloc+20)) !Tableau 20 27 | allocate( fixed(ntotv), stat = alloc_stat(compt_alloc+21)) !Tableau 21 28 | allocate( eldis(ndofn,nnode), stat = alloc_stat(compt_alloc+22)) !Tableau 22 29 | allocate( tofor(ntotv), stat = alloc_stat(compt_alloc+23)) !Tableau 23 30 | allocate( stfor(ntotv), stat = alloc_stat(compt_alloc+24)) !Tableau 24 31 | allocate( estif(nevab,nevab), stat = alloc_stat(compt_alloc+25)) !Tableau 25 32 | allocate( posgp(ngaus), stat = alloc_stat(compt_alloc+26)) !Tableau 26 33 | allocate( weigp(ngaus), stat = alloc_stat(compt_alloc+27)) !Tableau 27 34 | allocate( treac2(npoin,ndofn), stat = alloc_stat(compt_alloc+28)) !Tableau 28 35 | allocate( elcod(ndofn,nnode), stat = alloc_stat(compt_alloc+32)) !Tableau 22 36 | 37 | allocate( dmatx(4,4), stat = alloc_stat(compt_alloc+33)) !Tableau 22 38 | allocate( bmatx(4,2*nnode), stat = alloc_stat(compt_alloc+34)) !Tableau 22 39 | allocate( bmatx_tr(2*nnode,4), stat = alloc_stat(compt_alloc+34)) !Tableau 22 40 | 41 | allocate( stran(4), stat = alloc_stat(compt_alloc+34)) !Tableau 22 42 | allocate( stres(4), stat = alloc_stat(compt_alloc+34)) !Tableau 22 43 | allocate( eload_temp(4), stat = alloc_stat(compt_alloc+34)) !Tableau 22 44 | allocate( sigma(4), stat = alloc_stat(compt_alloc+34)) !Tableau 22 45 | allocate( strsg_out(nelem*nstr1,(ngaus*ngaus)+1), stat = alloc_stat(compt_alloc+40)) !Tableau 22 46 | allocate( defsg(nstr1,ntotg), stat = alloc_stat(compt_alloc+56)) !Tableau 20 47 | 48 | allocate( young_gp(ntotg), stat = alloc_stat(compt_alloc+18)) !Tableau 18 49 | 50 | ! allocate(gpcod_all_global(nelem,2*ngaus)) !Tableau 22 51 | 52 | !allocate( gstif(mfron,mfron), stat = alloc_stat(compt_alloc+29)) !Tableau 29 53 | !allocate( gstif_temp(mfron,mfron), stat = alloc_stat(compt_alloc+30)) !Tableau 30 54 | !allocate( rgstif(nvfix,nvfix), stat = alloc_stat(compt_alloc+31)) !Tableau 29 55 | !allocate( gload(ntotv), stat = alloc_stat(compt_alloc+32)) !Tableau 28 56 | !allocate( gload_temp(ntotv), stat = alloc_stat(compt_alloc+33)) !Tableau 29 57 | !allocate( asdis_temp(ntotv), stat = alloc_stat(compt_alloc+34)) !Tableau 28 58 | !allocate( rgload(nvfix), stat = alloc_stat(compt_alloc+35)) !Tableau 29 59 | !allocate( rasdis(nvfix), stat = alloc_stat(compt_alloc+36)) !Tableau 28 60 | 61 | 62 | !allocate( ngrad(melem,4), stat = alloc_stat(compt_alloc+29)) !Tableau 29 63 | !allocate( ngrad(melem,4), stat = alloc_stat(compt_alloc+29)) !Tableau 29 64 | !allocate( ngrad(melem,4), stat = alloc_stat(compt_alloc+29)) !Tableau 29 65 | !allocate( ngrad(melem,4), stat = alloc_stat(compt_alloc+29)) !Tableau 29 66 | !allocate( ngrad(melem,4), stat = alloc_stat(compt_alloc+29)) !Tableau 29 67 | !allocate( ngrad(melem,4), stat = alloc_stat(compt_alloc+29)) !Tableau 29 68 | !allocate( ngrad(melem,4), stat = alloc_stat(compt_alloc+29)) !Tableau 29 69 | !allocate( ngrad(melem,4), stat = alloc_stat(compt_alloc+29)) !Tableau 29 70 | !allocate( ngrad(melem,4), stat = alloc_stat(compt_alloc+29)) !Tableau 29 71 | !allocate( ngrad(melem,4), stat = alloc_stat(compt_alloc+29)) !Tableau 29 72 | !allocate( ngrad(melem,4), stat = alloc_stat(compt_alloc+29)) !Tableau 29 73 | !allocate( ngrad(melem,4), stat = alloc_stat(compt_alloc+29)) !Tableau 29 74 | !allocate( ngrad(melem,4), stat = alloc_stat(compt_alloc+29)) !Tableau 29 75 | 76 | 77 | 78 | 79 | 80 | !allocate( dbmat(nnode,nevab), stat = alloc_stat(compt_alloc+28)) !Tableau 28 81 | !allocate( bmatx(nnode,nevab), stat = alloc_stat(compt_alloc+29)) !Tableau 29 82 | !allocate( dmatx(nnode,nnode), stat = alloc_stat(compt_alloc+30)) !Tableau 30 83 | 84 | !print *, "Nombre de tableaux dynamiques",SIZE(alloc_stat) 85 | 86 | 87 | ! Verification du succes des allocations 88 | !do icompt=1,SIZE(alloc_stat) 89 | ! if (alloc_stat(icompt) /= 0) then 90 | ! print *, "Tableau n°",icompt,"Allocation dynamique: ERROR" 91 | ! stop 92 | ! end if 93 | !end do 94 | !print *, " " !Mise en page de la sortie console 95 | 96 | ! *** FIN Zone des ALLOCATIONS DYNAMIQUES DE MEMOIRE **** 97 | -------------------------------------------------------------------------------- /workspace/Alloc2.f90: -------------------------------------------------------------------------------- 1 | 2 | allocate( gstif(ntotv,ntotv), stat = alloc_stat(compt_alloc+29)) !Tableau 29 3 | ! allocate( gstif_backup(ntotv,ntotv), stat = alloc_stat(compt_alloc+29)) !Tableau 29 4 | allocate( rgstif(nvlib,nvlib), stat = alloc_stat(compt_alloc+31)) !Tableau 29 5 | allocate( gload(ntotv), stat = alloc_stat(compt_alloc+32)) !Tableau 28 6 | allocate( gload_backup(ntotv), stat = alloc_stat(compt_alloc+32)) !Tableau 28 7 | allocate( rgload(nvlib), stat = alloc_stat(compt_alloc+35)) !Tableau 29 8 | ! allocate( rgload_backup(nvlib), stat = alloc_stat(compt_alloc+35)) !Tableau 29 9 | allocate( rasdis(nvlib), stat = alloc_stat(compt_alloc+36)) !Tableau 28 10 | allocate( vec_residu(nvlib), stat = alloc_stat(compt_alloc+37)) !Tableau 29 11 | allocate( vec_residu_pd(nvlib), stat = alloc_stat(compt_alloc+37)) !Tableau 29 12 | ! allocate( vec_residu_backup(nvlib), stat = alloc_stat(compt_alloc+37)) !Tableau 29 13 | 14 | allocate(rstfor(nvlib), stat = alloc_stat(compt_alloc+37)) 15 | allocate( riffix(nvlib), stat = alloc_stat(compt_alloc+35)) !Tableau 29 16 | allocate( rfixed(nvlib), stat = alloc_stat(compt_alloc+35)) !Tableau 29 17 | 18 | !For lapack 19 | allocate( ipiv(nvlib), stat = alloc_stat(compt_alloc+35)) !Tableau 29 20 | 21 | allocate( rgstif_lapack(nvlib,nvlib), stat = alloc_stat(compt_alloc+31)) !Tableau 29 22 | allocate( rasdis_lapack(nvlib), stat = alloc_stat(compt_alloc+36)) !Tableau 28 23 | allocate( vec_residu_lapack(nvlib), stat = alloc_stat(compt_alloc+37)) !Tableau 29 24 | -------------------------------------------------------------------------------- /workspace/Alloc_CamClay.f90: -------------------------------------------------------------------------------- 1 | allocate( volspegp(ntotg)) 2 | allocate( epstnp(ntotg)) 3 | ! allocate( depstnp(ntotg)) 4 | allocate( epstnp_pre(ntotg)) 5 | allocate( yieldgp(ntotg)) 6 | allocate( Deigp(ntotg)) 7 | allocate( deviatoric_stress(ntotg)) 8 | allocate( effective_mean_stress(ntotg)) --------------------------------------------------------------------------------