1 |
cnh |
1.1 |
#!/usr/local/bin/tcsh -f |
2 |
|
|
# |
3 |
|
|
#$Id: $ |
4 |
|
|
#$Name: $ |
5 |
|
|
# |
6 |
|
|
# Script to create modules for an MITgcm production code instance |
7 |
|
|
# Run this script after the CPP stage of the standard genmake2 |
8 |
|
|
# build |
9 |
|
|
# |
10 |
|
|
# Script does following |
11 |
|
|
# Selects a set of "module" files with the .f suffix. |
12 |
|
|
# The set of module files includes all the source files except |
13 |
|
|
# main.f and a small number of runtime library files. |
14 |
|
|
# The module file set is then placed within a module of a given name. |
15 |
|
|
# |
16 |
|
|
# |
17 |
|
|
# |
18 |
|
|
# Set module prefix |
19 |
|
|
if ( $# == 1 ) then |
20 |
|
|
set mpref_s = ( $1 ) |
21 |
|
|
else |
22 |
|
|
set mpref_s = ( atm ) |
23 |
|
|
endif |
24 |
|
|
set mpref_l = ( mitgcm_org_${mpref_s} ) |
25 |
|
|
|
26 |
|
|
# Set output directory |
27 |
|
|
set outdir = ( mmout ) |
28 |
|
|
|
29 |
|
|
echo "Creating small f files" |
30 |
|
|
make small_f |
31 |
|
|
|
32 |
|
|
echo "Building list of .f files" |
33 |
|
|
ls -1 *.f > flist |
34 |
|
|
cp flist flist1 |
35 |
|
|
set mitgcmrtl = ( mdsio_byteswapr4.f mdsio_byteswapr8.f fool_the_compiler.f ) |
36 |
|
|
set excludelist = ( main.f ${mitgcmrtl} ) |
37 |
|
|
foreach f ( $excludelist ) |
38 |
|
|
cat flist1 | grep -v "^$f" > flist2 |
39 |
|
|
cp flist2 flist1 |
40 |
|
|
end |
41 |
|
|
cp flist1 flist |
42 |
|
|
set flist = (`cat flist`) |
43 |
|
|
|
44 |
|
|
echo "Joining .f into ${mpref_s}_mod.F" |
45 |
|
|
\rm ${mpref_l}_mod.Ftmp ${mpref_l}_mod.F |
46 |
|
|
foreach f ( $flist ) |
47 |
|
|
cat $f >> ${mpref_l}_mod.Ftmp |
48 |
|
|
echo -n "." |
49 |
|
|
end |
50 |
|
|
echo " " |
51 |
|
|
|
52 |
|
|
echo "Removing comments and blank lines" |
53 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -v '^ *$' | grep -v '^[a-zA-Z]' > ${mpref_l}_mod2.Ftmp |
54 |
|
|
|
55 |
|
|
echo "Putting END SUBROUTINE at end of subroutines" |
56 |
|
|
cat ${mpref_l}_mod2.Ftmp | awk -f print_sub.awk > ${mpref_l}_mod3.Ftmp |
57 |
|
|
cat <<EOF > ${mpref_l}_mod.Ftmp |
58 |
|
|
MODULE ${mpref_l} |
59 |
|
|
USE ESMF_MOD |
60 |
|
|
PRIVATE |
61 |
|
|
PUBLIC DRIVER_INIT |
62 |
|
|
PUBLIC DRIVER_RUN |
63 |
|
|
PUBLIC GET_DOMAIN_SIZE |
64 |
|
|
CONTAINS |
65 |
|
|
EOF |
66 |
|
|
cat ${mpref_l}_mod3.Ftmp >> ${mpref_l}_mod.Ftmp |
67 |
|
|
|
68 |
|
|
# Remove EXTERNAL refs for functions |
69 |
|
|
echo "Removing EXTERNAL refs for functions that are within the module" |
70 |
|
|
set extDel = ( DIFFERENT_MULTIPLE IFNBLNK ILNBLNK TIMER_INDEX \ |
71 |
|
|
IO_ERRCOUNT MDS_RECLEN PORT_RAND SBO_RHO NLATBND \ |
72 |
|
|
EXF_BULKQSAT EXF_BULKCDN EXF_BULKRHN) |
73 |
|
|
foreach e ( $extDel ) |
74 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -iv " EXTERNAL *${e}" > f1.Ftmp |
75 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
76 |
|
|
end |
77 |
|
|
|
78 |
|
|
# Remove type declaarations for functions |
79 |
|
|
echo "Removing type declarations for functions that are within the module" |
80 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -iv ' *LOGICAL *DIFFERENT_MULTIPLE' > f1.Ftmp |
81 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
82 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -iv ' *INTEGER *ILNBLNK' > f1.Ftmp |
83 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
84 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -iv ' *INTEGER *IFNBLNK' > f1.Ftmp |
85 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
86 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -iv ' *INTEGER *TIMER_INDEX' > f1.Ftmp |
87 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
88 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -iv ' *INTEGER *IO_ERRCOUNT' > f1.Ftmp |
89 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
90 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -iv ' *INTEGER *MDS_RECLEN' > f1.Ftmp |
91 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
92 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -iv ' *INTEGER *NLATBND' > f1.Ftmp |
93 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
94 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -iv ' *REAL\*8 *PORT_RAND' > f1.Ftmp |
95 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
96 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -iv ' *REAL\*8 *SBO_RHO' > f1.Ftmp |
97 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
98 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -iv ' *REAL\*8 *EXF_BULKQSAT' > f1.Ftmp |
99 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
100 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -iv ' *REAL\*8 *EXF_BULKCDN' > f1.Ftmp |
101 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
102 |
|
|
cat ${mpref_l}_mod.Ftmp | grep -iv ' *REAL\*8 *EXF_BULKRHN' > f1.Ftmp |
103 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
104 |
|
|
|
105 |
|
|
echo "Putting END FUNCTION at end of functions" |
106 |
|
|
cat ${mpref_l}_mod2.Ftmp | awk -f print_func.awk > ${mpref_l}_mod4.Ftmp |
107 |
|
|
cat ${mpref_l}_mod4.Ftmp >> ${mpref_l}_mod.Ftmp |
108 |
|
|
|
109 |
|
|
cat <<EOF >> ${mpref_l}_mod.Ftmp |
110 |
|
|
END MODULE ${mpref_l} |
111 |
|
|
EOF |
112 |
|
|
# Change all the common block names in the module |
113 |
|
|
# cat ${mpref_l}_mod.Ftmp | sed s'z\( *COMMON *[^/]*/ *\)\([^ ]*\)\( */.*\)z\1COMPOCEAN_\2\3z' >f1.Ftmp |
114 |
|
|
cat ${mpref_l}_mod.Ftmp | sed s'z\( *COMMON[^/]*\)/\(.*\)/\([^/]*\)z COMMON/C_'${mpref_s}'_\2/\3z' > f1.Ftmp |
115 |
|
|
cp f1.Ftmp ${mpref_l}_mod.Ftmp |
116 |
|
|
|
117 |
|
|
echo "Compiling code" |
118 |
|
|
set comp = /s/local/1/cnh/usr/local/pkg/lammpi/lam-7.0.3/lahey/bin/mpif77 |
119 |
|
|
set compopts = ( --dbl -O0 --fix --lst --xref --wide -I/s/local/1/cnh/usr/local/src/ESMF_1_0_4_withlam/esmf/mod/modO/Linux.lahey.32.default ) |
120 |
|
|
set complibs = ( -L/s/local/1/cnh/usr/local/src/ESMF_1_0_4_withlam/esmf/lib/libO/Linux.lahey.32.default -lesmf ) |
121 |
|
|
|
122 |
|
|
set comp = /usr/local/pkg/mpi/mpi-1.2.4..8a-gm-1.5/pgi/bin/mpif90 |
123 |
|
|
set compopts = ( -r8 -Mfixed -Mextend -byteswapio ) |
124 |
|
|
set complibs = ( ) |
125 |
|
|
|
126 |
|
|
set comp = /usr/local/pkg/mpi/mpich-1.2.5..10/lahey/bin/mpif90 |
127 |
|
|
set compopts = ( --dbl --o2 --fix --lst --xref --wide --tp4 ) |
128 |
|
|
#set compopts = ( --dbl --o0 --fix --lst --xref --wide --sav ) |
129 |
|
|
set complibs = ( -L/usr/local/pkg/ESMF/ESMF_1_0_4/mpich-1.2.5..10/lahey/lib/libO/Linux.lahey.32.default -lesmf ) |
130 |
|
|
set compinc = ( -I/usr/local/pkg/ESMF/ESMF_1_0_4/mpich-1.2.5..10/lahey/mod/modO/Linux.lahey.32.default ) |
131 |
|
|
set compinc = ( ${compinc} -I${BUILDROOT}/esmf_top ) |
132 |
|
|
|
133 |
|
|
#set comp = xlf95 |
134 |
|
|
#set compopts = ( -qfixed=132 -O3 -qarch=pwr4 -qtune=pwr4 -qcache=auto -qmaxmem=-1 -bmaxdata:0x80000000 -q64 ) |
135 |
|
|
#set compopts = ( --dbl --o0 --fix --lst --xref --wide --sav ) |
136 |
|
|
#set complibs = ( -L/fs/cgd/data0/erik/esmf/lib/libO/AIX.default.64.default -lesmf ) |
137 |
|
|
#set compinc = ( -I/fs/cgd/data0/erik/esmf/mod/modO/AIX.default.64.default ) |
138 |
|
|
|
139 |
|
|
|
140 |
|
|
source ${BUILDROOT}/tools/comp_profile |
141 |
|
|
|
142 |
|
|
set compinc = ( ${compinc} -I${BUILDROOT}/esmf_top ) |
143 |
|
|
|
144 |
|
|
|
145 |
|
|
# Create output directory |
146 |
|
|
mkdir mmout |
147 |
|
|
|
148 |
|
|
# Create runtime library archive |
149 |
|
|
set mitgcmrtlo = ( ) |
150 |
|
|
foreach f ( $mitgcmrtl ) |
151 |
|
|
echo " " | $comp $compopts -c ${f} |
152 |
|
|
set mitgcmrtlo = ( $mitgcmrtlo ${f:r}.o ) |
153 |
|
|
end |
154 |
|
|
cc -q64 -c tim.c |
155 |
|
|
set mitgcmrtlo = ( $mitgcmrtlo tim.o ) |
156 |
|
|
\rm mmout/libmitgcmrtl.a |
157 |
|
|
ar -X64 -s -rc mmout/libmitgcmrtl.a $mitgcmrtlo |
158 |
|
|
#ranlib mmout/libmitgcmrtl.a |
159 |
|
|
|
160 |
|
|
# Create component library archive |
161 |
|
|
mv ${mpref_l}_mod.Ftmp ${mpref_l}_mod.F |
162 |
|
|
source ${BUILDROOT}/tools/scommand |
163 |
|
|
mv foo.F ${mpref_l}_mod.F |
164 |
|
|
echo " " | $comp $compopts -c ${mpref_l}_mod.F ${complibs} ${compinc} |
165 |
|
|
mv ${mpref_l}_mod.F ${mpref_l}_mod.Ftmp |
166 |
|
|
./template_comp.sh ${mpref_s} |
167 |
|
|
cc -q64 -c component_${mpref_s}_context.c |
168 |
|
|
\rm mmout/lib${mpref_l}.a |
169 |
|
|
ar -X64 -s -rc mmout/lib${mpref_l}.a ${mpref_l}_mod.o component_${mpref_s}_context.o |
170 |
|
|
#ranlib mmout/lib${mpref_l}.a |
171 |
|
|
cp ${mpref_l}.mod mmout |
172 |
|
|
|
173 |
|
|
\rm *mod |
174 |
|
|
mv main.f main.F90 |
175 |
|
|
#echo $comp $compopts main.F90 ${mpref_l}_mod.o $mitgcmrtlo tim.o $complibs |
176 |
|
|
#echo " " | $comp $compopts main.F90 ${mpref_l}_mod.o $mitgcmrtlo $complibs |
177 |
|
|
#echo $comp $compopts main.F90 -Immout -Lmmout -l${mpref_l} -lmitgcmrtl $complibs |
178 |
|
|
#echo " " | $comp $compopts main.F90 -Immout -Lmmout -l${mpref_l} -lmitgcmrtl $complibs |
179 |
|
|
mv main.F90 main.f |
180 |
|
|
|
181 |
|
|
# Lahey compiler command line |
182 |
|
|
# /usr/local/pkg/lammpi/lam-7.0.3/lahey/bin/mpif77 --dbl -O0 --fix --lst --xref --wide -I/s/local/1/cnh/usr/local/src/ESMF_1_0_4_withlam/esmf/mod/modO/Linux.lahey.32.default main.F90 ${mpref_l}_mod.o mdsio_byteswapr4.o mdsio_byteswapr8.o fool_the_compiler.o tim.o -L/home/cnh/src/ESMF_1_0_4_withlam/esmf/lib/libO/Linux.lahey.32.default -lesmf |
183 |
|
|
# To run |
184 |
|
|
# /s/local/1/cnh/usr/local/pkg/lammpi/lam-7.0.3/lahey/bin/mpirun -np 4 -t -v ../build/a.out |
185 |
|
|
# To start lam daemon |
186 |
|
|
# /s/local/1/cnh/usr/local/pkg/lammpi/lam-7.0.3/lahey/bin/lamboot -c /s/local/1/cnh/usr/local/pkg/lammpi/lam-7.0.3/lahey/etc/lam-conf.lamd -v -d |
187 |
|
|
# NB - for starting daemon you need "lamd" in your search path |