1c --------------------------------------------------------------------------- 2c 3c Gmsh Fortran tutorial 6 4c 5c Transfinite meshes 6c 7c --------------------------------------------------------------------------- 8 9 include "gmshf.h" 10 11 program main 12 use, intrinsic :: iso_c_binding 13 use gmsh_fortran 14 15 implicit none 16 integer(c_int) :: ierr, argc, itmp, i, status, len 17 integer(c_int) :: p1, p2, l1, l2, l3 18 real(c_double) :: lc 19 20 integer(c_int) :: cl1(4) = (/4, 1, -2, 3/) 21 integer(c_int) :: cl2(6) = (/2, -1, 0, 0, 0, -3/) 22 integer(c_int) :: cl3(4) = (/13, 10, 11, 12/) 23 integer(c_int) :: s1(1) = (/1/) 24 integer(c_int) :: s2(1) = (/-2/) 25 integer(c_int) :: s3(1) = (/14/) 26 27 integer(c_int) :: r4(4) = (/2, 1, 1, 4/) 28 integer(c_int) :: ts(4) = (/1, 2, 3, 4/) 29 30 type(c_ptr), allocatable :: argv(:) 31 32 type string 33 character(len = :, kind = c_char), allocatable :: item 34 end type string 35 type(string), allocatable, target :: tmp(:) 36 37 character(80) :: buf 38 39 lc = 1d - 2 40 41 argc = command_argument_count() 42 allocate(argv(argc + 2)) 43 allocate(tmp(argc + 1)) 44 45 do i = 0, argc 46 call get_command_argument(i, buf, len) 47 tmp(i + 1) % item = buf(1 : len) // c_null_char 48 argv(i + 1) = c_loc(tmp(i + 1) % item) 49 enddo 50 argv(argc + 2) = c_null_ptr 51 52 call gmshInitialize(argc + 1, argv, 1, 0, ierr) 53 54 call gmshModelAdd("t6" // c_null_char, ierr) 55 56 itmp = gmshModelGeoAddPoint(0d0, 0d0, 0d0, lc, 1, ierr) 57 itmp = gmshModelGeoAddPoint(0.1d0, 0d0, 0d0, lc, 2, ierr) 58 itmp = gmshModelGeoAddPoint(0.1d0, 0.3d0, 0d0, lc, 3, ierr) 59 itmp = gmshModelGeoAddPoint(0d0, 0.3d0, 0d0, lc, 4, ierr) 60 61 itmp = gmshModelGeoAddLine(1, 2, 1, ierr) 62 itmp = gmshModelGeoAddLine(3, 2, 2, ierr) 63 itmp = gmshModelGeoAddLine(3, 4, 3, ierr) 64 itmp = gmshModelGeoAddLine(4, 1, 4, ierr) 65 66 itmp = gmshModelGeoAddCurveLoop(cl1, 4_8, 1, 0, ierr) 67 itmp = gmshModelGeoAddPlaneSurface(s1, 1_8, 1, ierr) 68 69 call gmshModelGeoRemove(r4, 4_8, 0, ierr) 70 71 p1 = gmshModelGeoAddPoint(-0.05d0, 0.05d0, 0d0, lc, -1, ierr) 72 p2 = gmshModelGeoAddPoint(-0.05d0, 0.1d0, 0d0, lc, -1, ierr) 73 74 l1 = gmshModelGeoAddLine(1, p1, -1, ierr) 75 l2 = gmshModelGeoAddLine(p1, p2, -1, ierr) 76 l3 = gmshModelGeoAddLine(p2, 4, -1, ierr) 77 78 cl2(3) = l1 79 cl2(4) = l2 80 cl2(5) = l3 81 itmp = gmshModelGeoAddCurveLoop(cl2, 6_8, 2, 0, ierr) 82 itmp = gmshModelGeoAddPlaneSurface(s2, 1_8, 1, ierr) 83 84 call gmshModelGeoMeshSetTransfiniteCurve(2, 20, 85 & "Progression" // c_null_char, 1d0, ierr) 86 call gmshModelGeoMeshSetTransfiniteCurve(l1, 6, 87 & "Progression" // c_null_char, 1d0, ierr) 88 call gmshModelGeoMeshSetTransfiniteCurve(l2, 6, 89 & "Progression" // c_null_char, 1d0, ierr) 90 call gmshModelGeoMeshSetTransfiniteCurve(l3, 10, 91 & "Progression" // c_null_char, 1d0, ierr) 92 call gmshModelGeoMeshSetTransfiniteCurve(1, 30, 93 & "Progression" // c_null_char, -1.2d0, ierr) 94 call gmshModelGeoMeshSetTransfiniteCurve(3, 30, 95 & "Progression" // c_null_char, 1.2d0, ierr) 96 97 call gmshModelGeoMeshSetTransfiniteSurface(1, 98 & "Left" // c_null_char, ts, 4_8, ierr) 99 call gmshModelGeoMeshSetRecombine(2, 1, 45d0, ierr) 100 101 itmp = gmshModelGeoAddPoint(0.2d0, 0.2d0, 0d0, 1d0, 7, ierr) 102 itmp = gmshModelGeoAddPoint(0.2d0, 0.1d0, 0d0, 1d0, 8, ierr) 103 itmp = gmshModelGeoAddPoint(0d0, 0.3d0, 0d0, 1d0, 9, ierr) 104 itmp = gmshModelGeoAddPoint(0.25d0, 0.2d0, 0d0, 1d0, 10, ierr) 105 itmp = gmshModelGeoAddPoint(0.3d0, 0.1d0, 0d0, 1d0, 11, ierr) 106 107 itmp = gmshModelGeoAddLine(8, 11, 10, ierr) 108 itmp = gmshModelGeoAddLine(11, 10, 11, ierr) 109 itmp = gmshModelGeoAddLine(10, 7, 12, ierr) 110 itmp = gmshModelGeoAddLine(7, 8, 13, ierr) 111 112 itmp = gmshModelGeoAddCurveLoop(cl3, 4_8, 14, 0, ierr) 113 itmp = gmshModelGeoAddPlaneSurface(s3, 1_8, 15, ierr) 114 115 do i = 10, 13 116 call gmshModelGeoMeshSetTransfiniteCurve(i, 10, 117 & "Progression" // c_null_char, 1d0, ierr) 118 enddo 119 120 call gmshModelGeoMeshSetTransfiniteSurface(15, 121 & "Left" // c_null_char, ts, 0_8, ierr) 122 123 call gmshOptionSetNumber("Mesh.Smoothing" // c_null_char, 124 & 100d0, ierr) 125 126 call gmshModelGeoSynchronize(ierr) 127 128 call gmshModelMeshGenerate(2, ierr) 129 call gmshWrite("t6.msh" // c_null_char, ierr) 130 131c call gmshFltkRun(ierr) 132 133 call gmshFinalize(ierr) 134 135 deallocate(tmp) 136 deallocate(argv) 137 138 stop 139 end 140