-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
calculix-ccx: add new package (#19673)
--------- Co-authored-by: مهدي شينون (Mehdi Chinoune) <[email protected]>
- Loading branch information
1 parent
4dcc9c1
commit 3c4e841
Showing
3 changed files
with
325 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# Maintainer: Rafał Brzegowy <[email protected]> | ||
|
||
_realname=calculix-ccx | ||
pkgbase=mingw-w64-${_realname} | ||
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}" | ||
pkgver=2.21 | ||
pkgrel=1 | ||
pkgdesc="CalculiX: 3D Structural Finite Element Program - Solver (mingw-w64)" | ||
arch=('any') | ||
mingw_arch=('mingw64' 'ucrt64') | ||
url="http://www.calculix.de/" | ||
license=('spdx:GPL-2.0-or-later') | ||
depends=("${MINGW_PACKAGE_PREFIX}-arpack" | ||
"${MINGW_PACKAGE_PREFIX}-arpack64" | ||
"${MINGW_PACKAGE_PREFIX}-omp" | ||
"${MINGW_PACKAGE_PREFIX}-openblas" | ||
"${MINGW_PACKAGE_PREFIX}-openblas64" | ||
"${MINGW_PACKAGE_PREFIX}-spooles" | ||
$([[ ${MINGW_PACKAGE_PREFIX} == *-clang-* ]] || echo "${MINGW_PACKAGE_PREFIX}-gcc-libgfortran")) | ||
makedepends=("${MINGW_PACKAGE_PREFIX}-fc") | ||
source=("http://www.dhondt.de/ccx_${pkgver}.src.tar.bz2" | ||
"http://www.dhondt.de/gpl-2.0.txt" | ||
"ccx_mingw.patch" | ||
"ccx_ooc.patch") | ||
sha256sums=('52a20ef7216c6e2de75eae460539915640e3140ec4a2f631a9301e01eda605ad' | ||
'8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643' | ||
'64a9b4aae8910f1acd1d28b65e188134775670f9ada5d15614df38c9cda16c53' | ||
'dd81df3de137a05b45e39fe61830337e6405ec566148598dab2828a6d9780e8a') | ||
|
||
prepare() { | ||
cd "${srcdir}/CalculiX/ccx_${pkgver}/src" | ||
patch -Np1 < ../../../ccx_mingw.patch | ||
patch -Np1 < ../../../ccx_ooc.patch | ||
} | ||
|
||
build() | ||
{ | ||
cd "${srcdir}/CalculiX/ccx_${pkgver}/src" | ||
if [[ ${MINGW_PACKAGE_PREFIX} != *-clang-* ]]; then | ||
CFLAGS+=" -fopenmp" | ||
FC=gfortran | ||
export FFLAGS="-fallow-argument-mismatch -fopenmp -O2" | ||
export OMP_LIBS="-lgomp -lquadmath" | ||
else | ||
CFLAGS+=" -fopenmp -Wno-implicit-function-declaration" | ||
FC=flang | ||
export FFLAGS="-O2" | ||
export OMP_LIBS="-lomp" | ||
fi | ||
|
||
make CC=${CC} FC=${FC} CCX_VERSION=${pkgver} -f Makefile_mingw_i4 | ||
make CC=${CC} FC=${FC} CCX_VERSION=${pkgver} -f Makefile_mingw_i8 | ||
} | ||
|
||
package() | ||
{ | ||
install -Dm755 ${srcdir}/CalculiX/ccx_${pkgver}/src/ccx_i4/ccx_i4.exe ${pkgdir}${MINGW_PREFIX}/bin/ccx.exe | ||
install -Dm755 ${srcdir}/CalculiX/ccx_${pkgver}/src/ccx_i8/ccx_i8.exe ${pkgdir}${MINGW_PREFIX}/bin/ccx_i8.exe | ||
|
||
install -Dm755 ${srcdir}/gpl-2.0.txt ${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
--- a/Makefile_mingw_i8 | ||
+++ b/Makefile_mingw_i8 | ||
@@ -0,0 +1,44 @@ | ||
+#Specify where to store the generated .o files | ||
+OBJDIR = ccx_i8 | ||
+ | ||
+CFLAGS += -DARCH="Linux" -DARPACK -DMATRIXSTORAGE -DUSE_MT=1 -DNETWORKOUT -DCALCULIX_EXTERNAL_BEHAVIOURS_SUPPORT -fcommon | ||
+ | ||
+CFLAGS += -DINTSIZE64 | ||
+FFLAGS += -fdefault-integer-8 | ||
+ | ||
+#SPOOLES | ||
+CFLAGS+= -I ${MINGW_PREFIX}/include/spooles -DSPOOLES | ||
+ | ||
+CC=CC | ||
+FC=FC | ||
+ | ||
+#Source files in this folder and in the adapter directory | ||
+$(OBJDIR)/%.o : %.c | ||
+ $(CC) $(CFLAGS) -c $< -o $@ | ||
+$(OBJDIR)/%.o : %.f | ||
+ $(FC) $(FFLAGS) -c $< -o $@ | ||
+ | ||
+include Makefile.inc | ||
+ | ||
+SCCXMAIN = ccx_$(CCX_VERSION).c | ||
+ | ||
+OCCXF = $(SCCXF:%.f=$(OBJDIR)/%.o) | ||
+OCCXC = $(SCCXC:%.c=$(OBJDIR)/%.o) | ||
+OCCXMAIN = $(SCCXMAIN:%.c=$(OBJDIR)/%.o) | ||
+ | ||
+LDFLAGS = -lspoolesMT -lspooles | ||
+ | ||
+$(OBJDIR)/$(OBJDIR).exe: $(OBJDIR) $(OCCXMAIN) $(OBJDIR)/ccx_$(CCX_VERSION).a | ||
+ ./date.pl; $(CC) $(CFLAGS) -c $(SCCXMAIN); | ||
+ $(FC) $(FFLAGS) \ | ||
+ -o $@ $(OCCXMAIN) $(OBJDIR)/ccx_$(CCX_VERSION).a \ | ||
+ -lpthread $(OMP_LIBS) -larpack_64 -lopenblas_64 $(LDFLAGS) -lstdc++ | ||
+ | ||
+$(OBJDIR)/ccx_$(CCX_VERSION).a: $(OCCXF) $(OCCXC) | ||
+ ar vr $@ $? | ||
+ | ||
+$(OBJDIR): | ||
+ mkdir -p $(OBJDIR) | ||
+ | ||
+clean: | ||
+ rm -f $(OBJDIR)/*.o $(OBJDIR)/ccx_$(CCX_VERSION).a $(OBJDIR)/ccx_$(OBJDIR).exe | ||
--- a/Makefile_mingw_i4 | ||
+++ b/Makefile_mingw_i4 | ||
@@ -0,0 +1,41 @@ | ||
+#Specify where to store the generated .o files | ||
+OBJDIR = ccx_i4 | ||
+ | ||
+CFLAGS += -DARCH="Linux" -DARPACK -DMATRIXSTORAGE -DUSE_MT=1 -DNETWORKOUT -DCALCULIX_EXTERNAL_BEHAVIOURS_SUPPORT -fcommon | ||
+ | ||
+#SPOOLES | ||
+CFLAGS+= -I ${MINGW_PREFIX}/include/spooles -DSPOOLES | ||
+ | ||
+CC=CC | ||
+FC=FC | ||
+ | ||
+#Source files in this folder and in the adapter directory | ||
+$(OBJDIR)/%.o : %.c | ||
+ $(CC) $(CFLAGS) -c $< -o $@ | ||
+$(OBJDIR)/%.o : %.f | ||
+ $(FC) $(FFLAGS) -c $< -o $@ | ||
+ | ||
+include Makefile.inc | ||
+ | ||
+SCCXMAIN = ccx_$(CCX_VERSION).c | ||
+ | ||
+OCCXF = $(SCCXF:%.f=$(OBJDIR)/%.o) | ||
+OCCXC = $(SCCXC:%.c=$(OBJDIR)/%.o) | ||
+OCCXMAIN = $(SCCXMAIN:%.c=$(OBJDIR)/%.o) | ||
+ | ||
+LDFLAGS = -lspoolesMT -lspooles | ||
+ | ||
+$(OBJDIR)/$(OBJDIR).exe: $(OBJDIR) $(OCCXMAIN) $(OBJDIR)/ccx_$(CCX_VERSION).a | ||
+ ./date.pl; $(CC) $(CFLAGS) -c $(SCCXMAIN); | ||
+ $(FC) $(FFLAGS) \ | ||
+ -o $@ $(OCCXMAIN) $(OBJDIR)/ccx_$(CCX_VERSION).a \ | ||
+ -lpthread $(OMP_LIBS) -larpack -lopenblas $(LDFLAGS) -lstdc++ | ||
+ | ||
+$(OBJDIR)/ccx_$(CCX_VERSION).a: $(OCCXF) $(OCCXC) | ||
+ ar vr $@ $? | ||
+ | ||
+$(OBJDIR): | ||
+ mkdir -p $(OBJDIR) | ||
+ | ||
+clean: | ||
+ rm -f $(OBJDIR)/*.o $(OBJDIR)/ccx_$(CCX_VERSION).a $(OBJDIR)/ccx_$(OBJDIR).exe | ||
diff -urN src_orig/ccx_2.21.c src/ccx_2.21.c | ||
--- src_orig/ccx_2.21.c 2023-07-29 10:52:01.000000000 +0200 | ||
+++ src/ccx_2.21.c 2023-07-29 16:47:06.838731000 +0200 | ||
@@ -15,10 +15,6 @@ | ||
/* along with this program; if not, write to the Free Software */ | ||
/* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ | ||
|
||
-#ifdef __WIN32 | ||
-_set_output_format(_TWO_DIGIT_EXPONENT); | ||
-#endif | ||
- | ||
#ifdef CALCULIX_MPI | ||
#include <spoolesMPI.h> | ||
#endif | ||
@@ -37,6 +33,10 @@ | ||
|
||
int main(int argc,char *argv[]) | ||
{ | ||
+ | ||
+#if defined(_WIN32) && !defined(_UCRT) | ||
+_set_output_format(_TWO_DIGIT_EXPONENT); | ||
+#endif | ||
|
||
FILE *f1; | ||
|
||
diff -urN src_orig/ccx_2.21step.c src/ccx_2.21step.c | ||
--- src_orig/ccx_2.21step.c 2023-07-29 10:52:01.000000000 +0200 | ||
+++ src/ccx_2.21step.c 2023-07-29 17:05:22.548207900 +0200 | ||
@@ -15,10 +15,6 @@ | ||
/* along with this program; if not, write to the Free Software */ | ||
/* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ | ||
|
||
-#ifdef __WIN32 | ||
-_set_output_format(_TWO_DIGIT_EXPONENT); | ||
-#endif | ||
- | ||
#ifdef CALCULIX_MPI | ||
#include <spoolesMPI.h> | ||
#endif | ||
@@ -44,6 +40,10 @@ | ||
ITG *inputsteps,ITG *iperturb,ITG *irstrt,char **filabp, | ||
ITG *nlabel) | ||
{ | ||
+ | ||
+#if defined(_WIN32) && !defined(_UCRT) | ||
+_set_output_format(_TWO_DIGIT_EXPONENT); | ||
+#endif | ||
|
||
/* in FORTRAN convention: | ||
|
||
--- a/restartwrite.f | ||
+++ b/restartwrite.f | ||
@@ -113,7 +113,7 @@ | ||
! | ||
! check whether the restart file exists and is opened | ||
! | ||
- call system("rm -f temporaryrestartfile") | ||
+ call execute_command_line("rm -f temporaryrestartfile") | ||
! | ||
open(15,file="temporaryrestartfile",ACCESS='SEQUENTIAL', | ||
& FORM='UNFORMATTED',err=151) | ||
--- a/writeobj.f | ||
+++ b/writeobj.f | ||
@@ -55,7 +55,7 @@ | ||
dd=0.d0 | ||
do j=1,ndesi | ||
inode=nodedesi(j) | ||
- dd=dd+dgdxglob(1,inode,i)**2 | ||
+ dd=dd+dgdxglob(1,INT(inode),i)**2 | ||
enddo | ||
dd=dsqrt(dd) | ||
write(5,'(3x,a16,e14.7,3x,e16.7,3x,a80)') objectset(1,i),g0(i), |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
diff -urN src_orig/pardiso.c src/pardiso.c | ||
--- src_orig/pardiso.c 2023-07-29 10:49:53.000000000 +0200 | ||
+++ src/pardiso.c 2023-07-29 17:06:32.810872800 +0200 | ||
@@ -34,6 +34,50 @@ | ||
ITG mthread_mkl=0; | ||
char envMKL[32]; | ||
|
||
+ | ||
+/* Added by Victor Kemp 2022-11-18 to enable Out-Of-Core (OOC) mode. */ | ||
+void initialize_iparm(ITG *symmetryflag){ | ||
+ | ||
+ ITG i; | ||
+ char *env; | ||
+ | ||
+ // Most values are 0 | ||
+ for(i=0;i<=63;i++){ | ||
+ iparm[i]=0; | ||
+ } | ||
+ | ||
+ // iparm(1) = 1 means all other values are specified instead of being defaults. | ||
+ iparm[0]=1; | ||
+ | ||
+ // Non-zero default values | ||
+ iparm[1]=2; | ||
+ if(*symmetryflag==0){ | ||
+ iparm[9]=8; | ||
+ iparm[10]=0; | ||
+ iparm[12]=0; | ||
+ }else{ | ||
+ iparm[9]=13; | ||
+ iparm[10]=1; | ||
+ iparm[12]=1; | ||
+ } | ||
+ iparm[17]=-1; | ||
+ iparm[20]=1; | ||
+ | ||
+ // iparm(60) | ||
+ env=getenv("MKL_PARDISO_OOC_MAX_CORE_SIZE"); | ||
+ if(env) { | ||
+ // PARDISO chooses IC/OOC (In-Core / Out-Of-Core) mode according to the | ||
+ // environment variables | ||
+ // MKL_PARDISO_OOC_MAX_CORE_SIZE and | ||
+ // MKL_PARDISO_OOC_MAX_SWAP_SIZE. | ||
+ iparm[59]=1; | ||
+ }else{ | ||
+ // Default. IC mode only. | ||
+ iparm[59]=0; | ||
+ } | ||
+ | ||
+} | ||
+ | ||
void pardiso_factor(double *ad, double *au, double *adb, double *aub, | ||
double *sigma,ITG *icol, ITG *irow, | ||
ITG *neq, ITG *nzs, ITG *symmetryflag, ITG *inputformat, | ||
@@ -55,6 +99,10 @@ | ||
|
||
iparm[0]=0; | ||
iparm[1]=3; | ||
+ | ||
+ /* Added by Victor Kemp 2022-11-18 to enable Out-Of-Core (OOC) mode. */ | ||
+ initialize_iparm(symmetryflag); | ||
+ | ||
/* set MKL_NUM_THREADS to min(CCX_NPROC_EQUATION_SOLVER,OMP_NUM_THREADS) | ||
must be done once */ | ||
if (mthread_mkl == 0) { | ||
diff -urN src_orig/uamplitude.f src/uamplitude.f | ||
--- src_orig/uamplitude.f 2023-07-29 10:49:53.000000000 +0200 | ||
+++ src/uamplitude.f 2023-07-29 16:55:06.310789300 +0200 | ||
@@ -33,11 +33,31 @@ | ||
implicit none | ||
! | ||
character*80 name | ||
+ integer(4) time2 | ||
! | ||
- real*8 time,amplitude | ||
+ real*8 time,amplitude,pi | ||
! | ||
if(name(1:9).eq.'QUADRATIC') then | ||
amplitude=time**2 | ||
+ else if(name(1:3).eq.'SIN') then | ||
+ pi=4.d0*datan(1.d0) | ||
+ amplitude=sin(time*pi/2) | ||
+ else if(name(1:4).eq.'QSIN') then | ||
+ pi=4.d0*datan(1.d0) | ||
+ amplitude=sin(time*pi/2)**2 | ||
+ else if(name(1:6).eq.'ABSSIN') then | ||
+ pi=4.d0*datan(1.d0) | ||
+ amplitude=abs(sin(time*pi/2)) | ||
+ else if(name(1:3).eq.'COS') then | ||
+ pi=4.d0*datan(1.d0) | ||
+ amplitude=cos(time*pi/2) | ||
+ else if(name(1:7).eq.'ONEZERO') then | ||
+ time2=time | ||
+ if(modulo(time2,2).eq.0) THEN | ||
+ amplitude=(time-time2) | ||
+ else | ||
+ amplitude=1-(time-time2) | ||
+ endif | ||
else | ||
write(*,*) '*ERROR in uamplitude: unknown amplitude' | ||
call exit(201) |