forked from ahmadia/homebrew-science
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalculix-ccx.rb
125 lines (106 loc) · 3.94 KB
/
calculix-ccx.rb
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
class CalculixCcx < Formula
desc "Three-Dimensional Finite Element Solver"
homepage "http://www.calculix.de/"
url "http://www.dhondt.de/ccx_2.10.src.tar.bz2"
version "2.10"
sha256 "693497d19d8dd2a5376e64e038d5c248d87f0e2df46d409a83bf976596b319f5"
bottle do
cellar :any
sha256 "14f29dd416a4d8ad14d55598b5d53d5bbb74681dec38bd6f1760c781b9a0671b" => :el_capitan
sha256 "490e79f5f3ad45f456b58a4959436735cf4225ff5e2c56c54ee5ab932bccced5" => :yosemite
sha256 "6ebcb57fd3af53068e3955a17b85fe9016bb6a03393bdb778fa280bbd24bca32" => :mavericks
end
depends_on :fortran
depends_on "arpack"
depends_on "pkg-config" => :build
resource "test" do
url "http://www.dhondt.de/ccx_2.10.test.tar.bz2"
version "2.10"
sha256 "a5e00abc7f9b2a5a5f1a4f7b414617dc65cd0be9b2a66c93e20b5a25c1392a75"
end
resource "doc" do
url "http://www.dhondt.de/ccx_2.10.htm.tar.bz2"
version "2.10"
sha256 "28f09511d791016dadb9f9cce382789fc250dfa5a60b105cfc4c9c2008e437c2"
end
resource "spooles" do
# The spooles library is not currently maintained and so would not make a
# good brew candidate. Instead it will be static linked to ccx.
url "http://www.netlib.org/linalg/spooles/spooles.2.2.tgz"
sha256 "a84559a0e987a1e423055ef4fdf3035d55b65bbe4bf915efaa1a35bef7f8c5dd"
end
# Add <pthread.h> to Calculix.h
# Read arpack link options from pkg-config
# u_free must return a void pointer
patch :DATA
def install
(buildpath/"spooles").install resource("spooles")
# Patch spooles library
inreplace "spooles/Make.inc", "/usr/lang-4.0/bin/cc", ENV.cc
inreplace "spooles/Tree/src/makeGlobalLib", "drawTree.c", "tree.c"
# Build serial spooles library
system "make", "-C", "spooles", "lib"
# Extend library with multi-threading (MT) subroutines
system "make", "-C", "spooles/MT/src", "makeLib"
# Build Calculix ccx
args = [
"CC=#{ENV.cc}",
"FC=#{ENV.fc}",
"CFLAGS=-O2 -I../../spooles -DARCH=Linux -DSPOOLES -DARPACK -DMATRIXSTORAGE -DUSE_MT=1",
"FFLAGS=-O2 -fopenmp",
"DIR=../../spooles",
]
target = Pathname.new("ccx_2.10/src/ccx_2.10")
system "make", "-C", target.dirname, target.basename, *args
bin.install target
(buildpath/"test").install resource("test")
pkgshare.install Dir["test/ccx_2.10/test/*"]
(buildpath/"doc").install resource("doc")
doc.install Dir["doc/ccx_2.10/doc/ccx/*"]
end
test do
cp "#{pkgshare}/spring1.inp", testpath
system "ccx_2.10", "spring1"
end
end
__END__
diff --git a/ccx_2.10/src/CalculiX.h b/ccx_2.10/src/CalculiX.h
index ee81ca8..d957130 100644
--- a/ccx_2.10/src/CalculiX.h
+++ b/ccx_2.10/src/CalculiX.h
@@ -15,6 +15,7 @@
/* along with this program; if not, write to the Free Software */
/* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+#include <pthread.h>
#define Linux 1
#define IRIX 2
#define IRIX64 3
diff --git a/ccx_2.10/src/Makefile b/ccx_2.10/src/Makefile
index 9335028..a587fdd 100755
--- a/ccx_2.10/src/Makefile
+++ b/ccx_2.10/src/Makefile
@@ -22,11 +22,12 @@ DIR=../../../SPOOLES.2.2
LIBS = \
$(DIR)/spooles.a \
- ../../../ARPACK/libarpack_INTEL.a \
- -lpthread -lm -lc
+ $(shell pkg-config --libs arpack)
-ccx_2.10: $(OCCXMAIN) ccx_2.10.a $(LIBS)
- ./date.pl; $(CC) $(CFLAGS) -c ccx_2.10.c; $(FC) -fopenmp -Wall -O3 -o $@ $(OCCXMAIN) ccx_2.10.a $(LIBS)
+ccx_2.10: $(OCCXMAIN) ccx_2.10.a
+ ./date.pl
+ $(CC) $(CFLAGS) -c ccx_2.10.c
+ $(FC) $(FFLAGS) -o $@ $(OCCXMAIN) ccx_2.10.a $(LIBS)
ccx_2.10.a: $(OCCXF) $(OCCXC)
ar vr $@ $?
diff --git a/ccx_2.10/src/u_free.c b/ccx_2.10/src/u_free.c
index acccf3b..da517de 100644
--- a/ccx_2.10/src/u_free.c
+++ b/ccx_2.10/src/u_free.c
@@ -41,5 +41,5 @@ void *u_free(void* ptr,const char *file,const int line, const char* ptr_name){
if(log_realloc==1) {
printf("FREEING of variable %s, file %s, line=%d: oldaddress= %ld\n",ptr_name,file,line,(long int)ptr);
}
- return;
+ return NULL;
}