[cam-users] to build CAM2 with multiple processors on Linux
Qiaozhen Mu
Qiaozhen Mu <qiaozhen@utig.ig.utexas.edu>
Fri, 12 Jul 2002 12:10:52 -0500 (CDT)
--Farrow_of_Piglets_883_000
Content-Type: TEXT/plain; charset=us-ascii
Content-MD5: V2ngbt+GMuIL4ueBReLmVA==
Dear CAM Users,
We have succeeded to build CAM2 on SGI using SPMD. But I failed to build CAM2
with 2 cpus on Linux which uses Myrinet. The attached files are the Makefile and
the script I use to build CAM2. In the MAKE.out, it said at the end,
"""""""""""""""""""""""""""""""""
lf95 -o
/disk/cg2/qiaozhen/ccsm/cam/cam2/models/atm/cam/amd_run/amd_spmd/amd_2_spmd/bld/
cam BalanceCheck.o BareGrou
ndFluxes.o Biogeophysics1.o Biogeophysics2.o Biogeophysics_Lake.o CanopyFluxes.o
CombineSnowLayers.o Combo.o Divide
SnowLayers.o Drainage.o EcosystemDyn.o FrictionVelocity.o Hydrology1.o
Hydrology2.o Hydrology_Lake.o Infiltration.o
LatentHCond.o MoninObukIni.o PhaseChange.o QSat.o RtmMod.o SensibleHCond.o
SnowAge.o SnowAlbedo.o SnowCompaction.o
SnowWater.o SoilAlbedo.o SoilTemperature.o SoilThermProp.o SoilWater.o
StabilityFunc.o Stomata.o SurfaceAlbedo.o S
urfaceRadiation.o SurfaceRunoff.o Tridiagonal.o TwoStream.o WetIceHydrology.o
advnce.o aermix.o albice.o albocean.o
areaMod.o atm_lndMod.o atmdrvMod.o bandij.o basdy.o basdz.o basiy.o bilin.o
binary_io.o bnddyi.o bndexch.o buffer.
o cam.o camice.o camoce.o ccsm_msg.o chemistry.o cldclw.o cldconst.o cldefr.o
cldems.o cldfrc.o cldint.o cldinti.o
cldnrh.o cldovrlap.o cldsav.o cldwat.o clm_csmMod.o clm_map.o clm_varcon.o
clm_varctl.o clm_varder.o clm_varmap.o c
lm_varpar.o clm_varsur.o clmtype.o closure.o commap.o comozp.o comslt.o comspe.o
comsrf.o cond.o constituents.o con
trolMod.o convtran.o courlim.o cpslec.o cubxdr.o cubydr.o cubzdr.o dadadj.o
datetime.o diagnostics.o difcor.o dp_co
upling.o driver.o dycore.o dyn.o dyn_grid.o dynconst.o dyndrv.o dynpkg.o
endrun.o engy_tdif.o engy_te.o error_messa
ges.o esinti.o extx.o extys.o extyv.o f_wrappers.o fft99.o filenames.o
fileutils.o findvalue.o flxint.o flxoce.o ga
uaw_mod.o geopotential.o get_cpustamp.o get_filename.o get_thread_num.o gffgch.o
grcalc.o grdini.o grdxy.o grmult.o
gw_drag.o hdinti.o herxin.o heryin.o herzin.o histFileMod.o histHandlerMod.o
histUpdate.o history.o hordif.o hordi
f1.o hrintp.o hycoef.o ice_constants.o ice_data.o ice_dh.o ice_kinds_mod.o
ice_sfc_flux.o ice_srf.o ice_tstm.o infn
an.o iniTimeConst.o iniTimeVar.o inicFileMod.o inidat.o inital.o initcom.o
initext.o initializeMod.o initindx.o int
i.o intp_util.o ioFileMod.o ioUnitMod.o iostop.o kdpfnd.o lagyin.o lcbas.o
lcdbas.o limdx.o limdy.o limdz.o linebuf
_stdout.o linemsdyn.o lininterp.o lnd_atmMod.o mf2mr.o mkglacier.o mkgridMod.o
mklai.o mklanwat.o mkmxovr.o mkpft.o
mkrank.o mksoicol.o mksoitex.o mksrfdatMod.o mkurban.o moistconvection.o
mpishorthand.o mr2mf.o mtdlss.o mvegFileM
od.o omcalc.o oznini.o oznint.o parse_namelist.o pdelb0.o pft_varcon.o
pftcFileMod.o phcs.o phys_adiabatic.o phys_g
rid.o phys_idealized.o physconst.o physics_types.o physpkg.o plevs0.o pmgrid.o
ppgrid.o precision.o preset.o print_
memusage.o prognostics.o program_csm.o program_off.o pspect.o q1q2.o qmassa.o
qmassd.o qneg3.o qneg3a.o qneg4.o qua
d.o radae.o radclwmx.o radcswmx.o radctl.o raddedmx.o radheat.o radini.o
radinp.o radoz2.o radozn.o ramp_ghg.o ramp
_scon.o ramp_so4_mod.o readinitial.o realloc3.o realloc4.o realloc6.o realloc7.o
reordp.o restFileMod.o restart.o r
estart_dynamics.o restart_physics.o rgrid.o rstwr.o scan2.o scandyn.o scanslt.o
scm0.o settau.o sgexx.o shr_const_m
od.o shr_file_mod.o shr_kind_mod.o shr_msg_mod.o shr_orb_mod.o shr_sys_mod.o
shr_timer_mod.o shr_vmath_fwrap.o shr_
vmath_mod.o sltb1.o sltini.o snowdp2lev.o so4bnd.o sortarray.o spegrd.o spetru.o
sphdep.o spmdMod.o spmd_dyn.o spmd
_phys.o spmdinit.o srchutil.o srfoce.o srfxfer.o sst_data.o stats.o stepon.o
string_utils.o surfFileMod.o t_error.o
t_initialize.o t_pclstr.o t_pr.o t_reset.o t_setoption.o t_stamp.o t_start.o
t_stop.o test_tracers.o tfilt_massfix
.o time_manager.o tphysac.o tphysbc.o tphysidl.o tracers.o trcab.o trcabn.o
trcems.o trcmix.o trcplk.o trcpth.o trj
mps.o trunc.o tsinti.o tstep.o turbulence.o units.o v2xy.o vertical_diffusion.o
vertinterp.o virtem.o vrtmap.o wrap
_mpi.o wrap_nf.o wv_saturation.o xqmass.o xy2v.o zenith.o zm_conv.o
-L/usr/local/netcdf/lib -lnetcdf -L/disk/cg2/qi
aozhen/ccsm/cam/cam2/models/atm/cam/amd_run/amd_spmd/amd_2_spmd/bld/esmf/lib/lib
O/linux_lf95 -lesmf --staticlink -L
/usr/local/gmmpi/lib -lmpich
/usr/local/gmmpi/lib/libmpich.a(regcache.o): In function `gmpi_regcache_init':
regcache.o(.text+0x1e): undefined reference to `gm_hash_hash_ptr'
regcache.o(.text+0x23): undefined reference to `gm_hash_compare_ptrs'
regcache.o(.text+0x28): undefined reference to `gm_create_hash'
regcache.o(.text+0x3c): undefined reference to `gm_create_lookaside'
/usr/local/gmmpi/lib/libmpich.a(regcache.o): In function
`gmpi_regcache_deregister':
regcache.o(.text+0x8f): undefined reference to `GM_PAGE_LEN'
regcache.o(.text+0x9e): undefined reference to `gm_deregister_memory'
/usr/local/gmmpi/lib/libmpich.a(regcache.o): In function
`gmpi_regcache_garbage_collector':
regcache.o(.text+0xea): undefined reference to `gm_hash_remove'
regcache.o(.text+0x105): undefined reference to `GM_PAGE_LEN'
regcache.o(.text+0x16a): undefined reference to `gm_lookaside_free'
/usr/local/gmmpi/lib/libmpich.a(regcache.o): In function
`gmpi_regcache_register':
regcache.o(.text+0x1b9): undefined reference to `GM_PAGE_LEN'
regcache.o(.text+0x1c8): undefined reference to `gm_register_memory'
regcache.o(.text+0x1e8): undefined reference to `GM_PAGE_LEN'
regcache.o(.text+0x1f7): undefined reference to `gm_register_memory'
regcache.o(.text+0x226): undefined reference to `gm_lookaside_alloc'
regcache.o(.text+0x27d): undefined reference to `GM_PAGE_LEN'
regcache.o(.text+0x292): undefined reference to `gm_hash_insert'
/usr/local/gmmpi/lib/libmpich.a(regcache.o): In function `gmpi_use_interval':
regcache.o(.text+0x2ed): undefined reference to `GM_PAGE_LEN'
regcache.o(.text+0x323): undefined reference to `gm_hash_find'
regcache.o(.text+0x372): undefined reference to `GM_PAGE_LEN'
regcache.o(.text+0x3ed): undefined reference to `GM_PAGE_LEN'
/usr/local/gmmpi/lib/libmpich.a(regcache.o): In function `gmpi_unuse_interval':
regcache.o(.text+0x440): undefined reference to `GM_PAGE_LEN'
regcache.o(.text+0x45f): undefined reference to `gm_hash_find'
regcache.o(.text+0x46b): undefined reference to `GM_PAGE_LEN'
/usr/local/gmmpi/lib/libmpich.a(regcache.o): In function `gmpi_clear_interval':
regcache.o(.text+0x496): undefined reference to `GM_PAGE_LEN'
regcache.o(.text+0x4c7): undefined reference to `gm_hash_find'
regcache.o(.text+0x4df): undefined reference to `gm_hash_remove'
regcache.o(.text+0x52e): undefined reference to `gm_lookaside_free'
regcache.o(.text+0x555): undefined reference to `GM_PAGE_LEN'
/usr/local/gmmpi/lib/libmpich.a(regcache.o): In function
`gmpi_clear_all_intervals':
regcache.o(.text+0x5a3): undefined reference to `gm_destroy_hash'
regcache.o(.text+0x5b1): undefined reference to `gm_destroy_lookaside'
/usr/local/gmmpi/lib/libmpich.a(gmpriv.o): In function `gmpi_dma_alloc':
gmpriv.o(.text+0x48): undefined reference to `gm_dma_malloc'
/usr/local/gmmpi/lib/libmpich.a(gmpriv.o): In function `gmpi_dma_free':
gmpriv.o(.text+0x60): undefined reference to `gm_dma_free'
/usr/local/gmmpi/lib/libmpich.a(gmpriv.o): In function `gmpi_check_send_status':
......
chself.o(.text+0x36a): undefined reference to `gm_bcopy'
chself.o(.text+0x416): undefined reference to `gm_bcopy'
/usr/local/gmmpi/lib/libmpich.a(gmconf.o): In function `gmpi_getconf':
gmconf.o(.text+0x1ec): undefined reference to `gm_bzero'
gmconf.o(.text+0x292): undefined reference to `gm_bzero'
gmconf.o(.text+0x2fe): undefined reference to `gm_bzero'
gmconf.o(.text+0x310): undefined reference to `gm_bzero'
gmconf.o(.text+0x619): undefined reference to `gm_blocking_receive_no_spin'
gmconf.o(.text+0x655): undefined reference to `gm_blocking_receive'
gmconf.o(.text+0x67c): undefined reference to `gm_receive'
gmake: ***
[/disk/cg2/qiaozhen/ccsm/cam/cam2/models/atm/cam/amd_run/amd_spmd/amd_2_spmd/bld
/cam] Error 1
"""""""""""""""""""""""""""""""""
I don't know what more I should modify in the Makefile or the script. Thanks for
any help in advance.
Best regards,
Qiaozhen
***************************************
*The University of Texas at Austin *
*Institute for Geophysics *
*4412 Spicewood Springs Rd., Bldg. 600*
*Austin, Texas 78759-8500 *
*phone:(512) 471-0462 *
*fax :(512) 471-8844 *
***************************************
--Farrow_of_Piglets_883_000
Content-Type: APPLICATION/x-sun-cshell-script; name="run-utig-amd-spmd.csh"; x-unix-mode=0755
Content-Transfer-Encoding: BASE64
Content-Description: run-utig-amd-spmd.csh
Content-MD5: l+5s9rknnCz0nfeMxBk07Q==
IyEgL2Jpbi90Y3NoIC1mCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IyMgUEMtbGludXgKIyMtLS0tLS0tLS0tLS0KCiMjIG50YXNrcyBpcyB0aGUg
bnVtYmVyIG9mIE1QSSB0YXNrcy4gIE9uIHRoZSBQQyB3ZSBhc3N1bWUgdXNl
IGEgcHVyZSBNUEkKIyMgY29uZmlndXJhdGlvbiB3aGljaCBhc3NpZ25zIDEg
TVBJIHRhc2sgcGVyIHByb2Nlc3Nvci4Kc2V0IG50YXNrcyA9IDIKCiMjIERv
IG91ciBiZXN0IHRvIGdldCBzdWZmaWNpZW50IHN0YWNrIG1lbW9yeQpsaW1p
dCBzdGFja3NpemUgdW5saW1pdGVkCgojIyBST09UIE9GIENBTSBESVNUUklC
VVRJT04gLSBwcm9iYWJseSBuZWVkcyB0byBiZSBjdXN0b21pemVkLgojIyBD
b250YWlucyB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBDQU0gZGlzdHJpYnV0
aW9uLgojIyAodGhlIHJvb3QgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBzdWJk
aXJlY3RvcnkgIm1vZGVscyIpCnNldCBjYW1yb290ICAgICAgPSAvZGlzay9j
ZzIvcWlhb3poZW4vY2NzbS9jYW0vY2FtMgoKIyMgUk9PVCBPRiBDQU0gREFU
QSBESVNUUklCVVRJT04gLSBuZWVkcyB0byBiZSBjdXN0b21pemVkIHVubGVz
cyBydW5uaW5nIGF0IE5DQVIuCiMjIENvbnRhaW5zIHRoZSBpbml0aWFsIGFu
ZCBib3VuZGFyeSBkYXRhIGZvciB0aGUgQ0FNIGRpc3RyaWJ1dGlvbi4KIyMg
KHRoZSByb290IGRpcmVjdG9yeSBjb250YWlucyB0aGUgc3ViZGlyZWN0b3Jp
ZXMgImF0bSIgYW5kICJsbmQiKQpzZXRlbnYgQ1NNX1JPT1QgICAgL2Rpc2sv
Y2cyL3FpYW96aGVuL2Njc20vY2FtL2lucHV0ZGF0YQoKIyMgRGVmYXVsdCBu
YW1lbGlzdCBzZXR0aW5nczoKIyMgJGNhc2UgaXMgdGhlIGNhc2UgaWRlbnRp
ZmllciBmb3IgdGhpcyBydW4uIEl0IHdpbGwgYmUgcGxhY2VkIGluIHRoZSBu
YW1lbGlzdC4KIyMgJHJ1bnR5cGUgaXMgdGhlIHJ1biB0eXBlOiBpbml0aWFs
LCByZXN0YXJ0LCBvciBicmFuY2guCiMjICRuZWxhcHNlIGlzIHRoZSBudW1i
ZXIgb2YgdGltZXN0ZXBzIHRvIGludGVncmF0ZSwgb3IgbnVtYmVyIG9mIGRh
eXMgaWYgbmVnYXRpdmUuCnNldCBjYXNlICAgICAgICAgPSBhbWRfMl9zcG1k
CnNldCBydW50eXBlICAgICAgPSBpbml0aWFsCnNldCBuZWxhcHNlICAgICAg
PSAtMQoKIyMgJHdya2RpciBpcyBhIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJl
IHRoZSBtb2RlbCB3aWxsIGJlIGJ1aWx0IGFuZCBydW4uCiMjICRibGRkaXIg
aXMgdGhlIGRpcmVjdG9yeSB3aGVyZSBtb2RlbCB3aWxsIGJlIGNvbXBpbGVk
LgojIyAkcnVuZGlyIGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIG1vZGVs
IHdpbGwgYmUgcnVuLgojIyAkY2ZnZGlyIGlzIHRoZSBkaXJlY3RvcnkgY29u
dGFpbmluZyB0aGUgQ0FNIGNvbmZpZ3VyYXRpb24gc2NyaXB0cy4Kc2V0IHdy
a2RpciAgICAgICA9IC9kaXNrL2NnMi9xaWFvemhlbi9jY3NtL2NhbS9jYW0y
L21vZGVscy9hdG0vY2FtL2FtZF9ydW4vYW1kX3NwbWQKc2V0IGJsZGRpciAg
ICAgICA9ICR3cmtkaXIvJGNhc2UvYmxkCnNldCBydW5kaXIgICAgICAgPSAk
d3JrZGlyLyRjYXNlCnNldCBjZmdkaXIgICAgICAgPSAkY2Ftcm9vdC9tb2Rl
bHMvYXRtL2NhbS9ibGQKCiMjIEVuc3VyZSB0aGF0IHJ1biBhbmQgYnVpbGQg
ZGlyZWN0b3JpZXMgZXhpc3QKbWtkaXIgLXAgJHJ1bmRpciAgICAgICAgICAg
ICAgICB8fCBlY2hvICJjYW5ub3QgY3JlYXRlICRydW5kaXIiICYmIGV4aXQg
MQpta2RpciAtcCAkYmxkZGlyICAgICAgICAgICAgICAgIHx8IGVjaG8gImNh
bm5vdCBjcmVhdGUgJGJsZGRpciIgJiYgZXhpdCAxCgojIyBJZiBhbiBleGVj
dXRhYmxlIGRvZXNuJ3QgZXhpc3QsIGJ1aWxkIG9uZS4KaWYgKCAhIC14ICRi
bGRkaXIvY2FtICkgdGhlbgogICAgY2QgJGJsZGRpciAgICAgICAgICAgICAg
ICAgIHx8IGVjaG8gImNkICRibGRkaXIgZmFpbGVkIiAmJiBleGl0IDEKICAg
ICRjZmdkaXIvY29uZmlndXJlIC1zIC1zcG1kICB8fCBlY2hvICJjb25maWd1
cmUgZmFpbGVkIiAmJiBleGl0IDEKICAgIGVjaG8gImJ1aWxkaW5nIENBTSBp
biAkYmxkZGlyIC4uLiIKICAgIGdtYWtlIC1qMiA+JiEgTUFLRS5vdXQgICAg
ICB8fCBlY2hvICJDQU0gYnVpbGQgZmFpbGVkOiBzZWUgJGJsZGRpci9vdXQu
Z21ha2UiICYmIGV4aXQgMQplbmRpZgoKbXYgY2FtIC4uLwojIyBDcmVhdGUg
dGhlIG5hbWVsaXN0CiMgY2QgJGJsZGRpciAgICAgICAgICAgICAgICAgICAg
ICB8fCBlY2hvICJjZCAkYmxkZGlyIGZhaWxlZCIgJiYgZXhpdCAxCiMgJGNm
Z2Rpci9idWlsZC1uYW1lbGlzdCAtcyAtY2FzZSAkY2FzZSAtcnVudHlwZSAk
cnVudHlwZSAtbyAkcnVuZGlyL25hbWVsaXN0IFwKIyAgLW5hbWVsaXN0ICIm
Y2FtZXhwIG5lbGFwc2U9JG5lbGFwc2UgLyIgIHx8IGVjaG8gImJ1aWxkLW5h
bWVsaXN0IGZhaWxlZCIgJiYgZXhpdCAxCgpjYXQgPiEgbmFtZWxpc3QgPDwg
RU9GICAgICAgICAgICAgICAgIHx8IGV4aXQgMQomY2FtZXhwCiBhYnNlbXNf
ZGF0YSA9ICcvZGlzay9jZzIvcWlhb3poZW4vY2NzbS9jYW0vaW5wdXRkYXRh
L2F0bS9jYW0yL3JhZC9hYnNfZW1zX2ZhY3RvcnNfZmFzdHZ4LjA1MjAwMS5u
YycKIGJuZHR2byAgICAgPSAnL2Rpc2svY2cyL3FpYW96aGVuL2Njc20vY2Ft
L2lucHV0ZGF0YS9hdG0vY2FtMi9vem9uZS9ub2FhbzMuMTk5MC4yMTk5OS5u
YycKIGJuZHR2cyAgICAgPSAnL2Rpc2svY2cyL3FpYW96aGVuL2Njc20vY2Ft
L2lucHV0ZGF0YS9hdG0vY2FtMi9zc3Qvc3N0X0hhZE9JQmxfYmNfNjR4MTI4
XzE5NDlfMjAwMV9jMDIwNDExLm5jJwogY2FzZWlkICAgICA9ICckY2FzZScK
IGN0aXRsZSAgICAgPSAnJGNhc2UgZnJhY3Rpb25hbCB3aXRoIFNTVCBkYXRh
c2V0IGZyb20gSmltIEh1cnJlbGwnCiBrbXhoZGMgICAgID0gNQogbmNkYXRh
ICAgICA9ICcvZGlzay9jZzIvcWlhb3poZW4vY2NzbS9jYW0vaW5wdXRkYXRh
L2F0bS9jYW0yL2luaWMvZ2F1cy9jYW1pXzAwMDAtMDktMDFfNjR4MTI4X1Q0
Ml9MMjZfYzAyMDUxNC5uYycKIG5lbGFwc2UgICAgPSAtMQogbnNyZXN0ICAg
ICA9IDAKIG5odGZycSAgICAgPSA3MgogaXllYXJfYWQgICA9IDE5NTAKIHN0
YXJ0X3ltZCAgPSAxOTQ5MDIwMQogc3N0Y3ljICAgICA9IC5mYWxzZS4KIG1z
c19pcnQgICAgPSAwCi8KJmNsbWV4cAogZmluaWRhdCAgICAgICA9ICcvZGlz
ay9jZzIvcWlhb3poZW4vY2NzbS9jYW0vaW5wdXRkYXRhL2xuZC9jbG0yL2lu
aWRhdGEvY2FtL2NsbWlfMDAwMC0wOS0wMV82NHgxMjhfVDQyX2MwMjA1MTQu
bmMnCiBmcGZ0Y29uICAgICAgID0gJy9kaXNrL2NnMi9xaWFvemhlbi9jY3Nt
L2NhbS9pbnB1dGRhdGEvbG5kL2NsbTIvcGZ0ZGF0YS9wZnQtcGh5c2lvbG9n
eScKIGZzdXJkYXQgICAgICAgPSAnL2Rpc2svY2cyL3FpYW96aGVuL2Njc20v
Y2FtL2lucHV0ZGF0YS9sbmQvY2xtMi9zcmZkYXRhL2NhbS9jbG1zXzY0eDEy
OF9jMDIwNTE0Lm5jJwogbWtzcmZfZmdsYWNpZXI9ICcvZGlzay9jZzIvcWlh
b3poZW4vY2NzbS9kb3dubG9hZC9pbnB1dGRhdGEvbG5kL2NsbTIvcmF3ZGF0
YS9ta3NyZl9nbGFjaWVyLm5jJwogbWtzcmZfZmxhaSAgICA9ICcvZGlzay9j
ZzIvcWlhb3poZW4vY2NzbS9kb3dubG9hZC9pbnB1dGRhdGEvbG5kL2NsbTIv
cmF3ZGF0YS9ta3NyZl9sYWkubmMnCiBta3NyZl9mbGFud2F0ID0gJy9kaXNr
L2NnMi9xaWFvemhlbi9jY3NtL2Rvd25sb2FkL2lucHV0ZGF0YS9sbmQvY2xt
Mi9yYXdkYXRhL21rc3JmX2xhbndhdC5uYycKIG1rc3JmX2Zzb2ljb2wgPSAn
L2Rpc2svY2cyL3FpYW96aGVuL2Njc20vZG93bmxvYWQvaW5wdXRkYXRhL2xu
ZC9jbG0yL3Jhd2RhdGEvbWtzcmZfc29pY29sX2NsbTIubmMnCiBta3NyZl9m
c29pdGV4ID0gJy9kaXNrL2NnMi9xaWFvemhlbi9jY3NtL2Rvd25sb2FkL2lu
cHV0ZGF0YS9sbmQvY2xtMi9yYXdkYXRhL21rc3JmX3NvaXRleC4xMGxldmVs
Lm5jJwogbWtzcmZfZnVyYmFuICA9ICcvZGlzay9jZzIvcWlhb3poZW4vY2Nz
bS9kb3dubG9hZC9pbnB1dGRhdGEvbG5kL2NsbTIvcmF3ZGF0YS9ta3NyZl91
cmJhbi5uYycKIG1rc3JmX2Z2ZWd0eXAgPSAnL2Rpc2svY2cyL3FpYW96aGVu
L2Njc20vZG93bmxvYWQvaW5wdXRkYXRhL2xuZC9jbG0yL3Jhd2RhdGEvbWtz
cmZfcGZ0Lm5jJwovCkVPRgoKc2V0ZW52IENMVVNURVIgL2Rpc2svY2cyL3Fp
YW96aGVuL2Njc20vY2FtL2NhbTIvbW9kZWxzL2F0bS9jYW0vYmxkL215cmlf
ZmlsZQpzZXRlbnYgbnAgMgoKIyMgUnVuIENBTQpjZCAkcnVuZGlyICAgICAg
ICAgICAgICAgICAgICAgIHx8IGVjaG8gImNkICRydW5kaXIgZmFpbGVkIiAm
JiBleGl0IDEKZWNobyAicnVubmluZyBDQU0gaW4gJHJ1bmRpciIKIyBtcGly
dW4gLW5wICRudGFza3MgJGJsZGRpci9jYW0gPCBuYW1lbGlzdCAgfHwgZWNo
byAiQ0FNIHJ1biBmYWlsZWQiICYmIGV4aXQgMQptcGlydW4uY2hfZ20gLS1n
bS12IC0tZ20ta2lsbCAxMCAtbnAgJE5QIC0tZ20tZiAkQ0xVU1RFUiBcCiAg
ICAgICAgICAgICAgICAgY2FtPG5hbWVsaXN0PnJ1bi5sb2cwICYKCmV4aXQg
MAo=
--Farrow_of_Piglets_883_000
Content-Type: TEXT/x-sun-Makefile; name=Makefile; charset=us-ascii; x-unix-mode=0644
Content-Description: Makefile
Content-MD5: RWA+1XDHc1uXt4WEVnFrBQ==
#-----------------------------------------------------------------------
# Makefile for building CAM on various platforms.
#
# This makefile assumes the existence the file:
#
# Filepath The directories, listed one per line, that contain the source
# code required to build CAM. This list is used the set the
# VPATH variable which is used by GNU make to search for
# dependencies (after it looks in the directory from which
# it was invoked). This list of directories, prepended with ./,
# is also used to construct the list of search directories
# used by the preprocessor (as specified by -I command-line options).
#
# The following macros may be set in the user's environment:
#
# ROOTDIR Root directory for the CAM source distribution.
# EXENAME Name to call the executable.
# MODEL_EXEDIR Directory to build the executable in.
# INC_NETCDF Directory location of the NetCDF include files.
# LIB_NETCDF Directory location of the NetCDF library.
# INC_MPI Directory location of the MPI include files.
# LIB_MPI Directory location of the MPI library.
# ESMF_ROOT Root directory of ESMF source tree. Default: $(ROOTDIR)/models/utils/esmf
# ESMF_BLD Upper level build directory for ESMF
# The ESMF .o files are built in $(ESMF_BLD)/obj
# The ESMF .m files are built in arch dependent subdirs of $(ESMF_BLD)/mod
# The ESMF library is built in architecture and optimization
# dependent subdirectories of $(ESMF_BLD)/lib
# DEBUG Set to TRUE to turn on compiler debugging options. Default: FALSE
# SPMD Whether to build in SPMD mode or not. [values TRUE FALSE]
# (If this variable not set then ./misc.h is checked)
# USER_FC Allow user to override the default Fortran compiler specified in Makefile.
# USER_CC Allow user to override the default C compiler specified in Makefile (linux only).
# USER_FFLAGS Additional compiler flags that the user wishes to set.
# NO_SWITCH On Compaq if the hardward switch is not available
# set this env variable to "TRUE".
#
# Defaults for all of the above are provided in the Makefile.
#
# Note: If ROOTDIR is not set the makefile searches for it in a file called "Rootdir"
#
# Note: The ESMF library is included in the CAM distribution in
# $ROOTDIR/models/utils/esmf and is built using this makefile.
#------------------------------------------------------------------------
# Set up special characters
null :=
space := $(null) $(null)
# Determine distribution root directory
ifeq ($(ROOTDIR),$(null))
ROOTDIR := $(shell cat Rootdir)
endif
# Check for the NetCDF library and include directories
ifeq ($(LIB_NETCDF),$(null))
LIB_NETCDF := /usr/local/netcdf/lib
endif
ifeq ($(INC_NETCDF),$(null))
INC_NETCDF := /usr/local/netcdf/include
endif
# Check for the MPI library and include directories
ifeq ($(LIB_MPI),$(null))
LIB_MPI := /usr/local/gmmpi/lib
endif
ifeq ($(INC_MPI),$(null))
INC_MPI := /usr/local/gmmpi/include
endif
# Build the ESMF library
ifeq ($(ESMF_ROOT),$(null))
ESMF_ROOT := ${ROOTDIR}/models/utils/esmf
endif
ifeq ($(ESMF_BLD),$(null))
ESMF_BLD := $(shell (mkdir ./esmf 2>/dev/null;cd ./esmf;pwd))
endif
ESMF_BOPT := O
ifeq ($(DEBUG),TRUE)
ESMF_BOPT := g
endif
ESMF_MOD := $(ESMF_BLD)/mod/mod$(ESMF_BOPT)
ESMF_LIB := $(ESMF_BLD)/lib/lib$(ESMF_BOPT)
# Check for directory in which to put executable
ifeq ($(MODEL_EXEDIR),$(null))
MODEL_EXEDIR := .
endif
# Check for name of executable
ifeq ($(EXENAME),$(null))
EXENAME := atm
endif
# Check if SPMD is defined in "misc.h"
# Ensure that it is defined and not just "undef SPMD" set in file
ifeq ($(SPMD),$(null))
SPMDSET := $(shell /bin/grep SPMD misc.h)
ifneq (,$(findstring define,$(SPMDSET)))
SPMD := TRUE
else
SPMD := FALSE
endif
endif
# Load dependency search path.
dirs := . $(shell cat Filepath)
# Set cpp search path, include netcdf
cpp_dirs := $(dirs) $(INC_NETCDF) $(INC_MPI)
cpp_path := $(foreach dir,$(cpp_dirs),-I$(dir)) # format for command line
# Expand any tildes in directory names. Change spaces to colons.
VPATH := $(foreach dir,$(cpp_dirs),$(wildcard $(dir)))
VPATH := $(subst $(space),:,$(VPATH))
#------------------------------------------------------------------------
# Primary target: build the model
#------------------------------------------------------------------------
all: $(MODEL_EXEDIR)/$(EXENAME)
# Get list of files and build dependency file for all .o files
# using perl scripts mkSrcfiles and mkDepends
SOURCES := $(shell cat Srcfiles)
Depends: Srcfiles Filepath
$(ROOTDIR)/models/atm/cam/bld/mkDepends Filepath Srcfiles > $@
Srcfiles: Filepath
$(ROOTDIR)/models/atm/cam/bld/mkSrcfiles > $@
OBJS := $(addsuffix .o, $(basename $(SOURCES)))
$(MODEL_EXEDIR)/$(EXENAME): $(OBJS)
$(FC) -o $@ $(OBJS) -L$(LIB_NETCDF) -lnetcdf -L$(ESMF_LIB)/$(ESMF_ARCH) -lesmf $(LDFLAGS)
debug: $(OBJS)
echo "FFLAGS: $(FFLAGS)"
echo "LDFLAGS: $(LDFLAGS)"
echo "OBJS: $(OBJS)"
test_fc: test_fc.o
$(FC) -o $@ test_fc.o $(LDFLAGS)
test_nc: test_nc.o
$(FC) -o $@ test_nc.o -L$(LIB_NETCDF) -lnetcdf $(LDFLAGS)
test_mpi: test_mpi.o
$(FC) -o $@ test_mpi.o $(LDFLAGS)
# Architecture-specific flags and rules
#
# Determine platform
UNAMES := $(shell uname -s)
#------------------------------------------------------------------------
# AIX
#------------------------------------------------------------------------
ifeq ($(UNAMES),AIX)
ESMF_ARCH := rs6000_sp
CPP := /lib/cpp
CC := xlc_r
CFLAGS := $(cpp_path) -O2 -DAIX
FPPFLAGS := -WF,-DHIDE_SHR_MSG,-DAIX,-DNO_SHR_VMATH
FFLAGS := $(cpp_path) $(FPPFLAGS) -qarch=auto -qrealsize=8 -qdpc=e -qsmp=noauto -qspillsize=2500 \
-I$(ESMF_MOD)/$(ESMF_ARCH)
FREEFLAGS := -qsuffix=f=f90:cpp=F90
FIXEDFLAGS := -qfixed=132
LDFLAGS := -qsmp=noauto -bmaxdata:0x80000000
ifeq ($(SPMD),TRUE)
FC := mpxlf90_r
else
FC := xlf90_r
FFLAGS += -WF,-DHIDE_MPI
endif
ifeq ($(DEBUG),TRUE)
#
# Bounds checking is unreliable on the IBM.
# Sometimes you can get it to go if you turn threading off (by deleting -qsmp=noauto)
#
FFLAGS += -g -d -qinitauto=7FF7FFFF -qflttrap=ov:zero:inv:en
else
# Inline when not debugging
FFLAGS += -O3 -qstrict -Q
endif
.SUFFIXES:
.SUFFIXES: .F .F90 .c .o
.F.o:
$(FC) -c $(FIXEDFLAGS) $(FFLAGS) $<
.F90.o:
$(FC) -c $(FREEFLAGS) $(FFLAGS) $<
.c.o:
cc -c $(CFLAGS) $<
endif
#------------------------------------------------------------------------
# SGI
#------------------------------------------------------------------------
ifeq ($(UNAMES),IRIX64)
ESMF_ARCH = IRIX64
FC := f90
CPP := /lib/cpp
CPPFLAGS := -P
CFLAGS := $(cpp_path) -64 -DIRIX64 -O2
FFLAGS = $(cpp_path) -64 -r8 -i4 -c -cpp -extend_source -DIRIX64 \
-DNO_SHR_VMATH -I$(ESMF_MOD)/$(ESMF_ARCH)
LDFLAGS = -64 -mp
# WARNING: -mp and -g together cause wrong answers
ifeq ($(DEBUG),TRUE)
FFLAGS += -g -DEBUG:trap_uninitialized=ON -C
else
FFLAGS += -O2 -mp
endif
# WARNING: - Don't run hybrid on SGI (that's what the -= -mp is all about)
ifeq ($(SPMD),TRUE)
FFLAGS -= -mp
FFLAGS += -I$(INC_MPI) -macro_expand
LDFLAGS += -L$(LIB_MPI) -lmpi
else
FFLAGS += -DHIDE_MPI
endif
.SUFFIXES:
.SUFFIXES: .F .F90 .c .o
.F.o:
$(FC) $(FFLAGS) $<
.F90.o:
$(FC) -DHIDE_SHR_MSG $(FFLAGS) $<
.c.o:
cc -c $(cpp_path) $(CFLAGS) $<
endif
#------------------------------------------------------------------------
# SUN
#------------------------------------------------------------------------
ifeq ($(UNAMES),SunOS)
ESMF_ARCH = solaris
FC := f90
FC77 := f77
CPP := /usr/ccs/lib/cpp
CFLAGS := $(cpp_path) -DSUNOS -DNO_SHR_VMATH
FFLAGS := $(cpp_path) -xs -stackvar -Qoption f90comp -r8const -e -DSUNOS -DHIDE_MPI \
-M$(ESMF_MOD)/$(ESMF_ARCH)
LDFLAGS := -L/opt/SUNWspro/lib -lf77compat -openmp -fast
SPEC_FFLAGS := $(cpp_path) -r8 -i4 -c
ifeq ($(DEBUG),TRUE)
FFLAGS += -g -dalign
SPEC_FFLAGS += -g -dalign
else
# Inline code when not debugging
FFLAGS += -inline=%auto -fast
endif
ifeq ($(SPMD),TRUE)
FFLAGS += -I$(INC_MPI)
LDFLAGS += -L$(LIB_MPI) -lmpich -lnsl -lsocket
else
FFLAGS += -DHIDE_MPI
endif
.SUFFIXES:
.SUFFIXES: .F .F90 .c .o
sgexx.o: sgexx.F
$(FC77) $(SPEC_FFLAGS) $<
fft99.o: fft99.F
$(FC77) $(SPEC_FFLAGS) $<
.F90.o:
$(FC) -c -DHIDE_SHR_MSG $(FFLAGS) $<
endif
#------------------------------------------------------------------------
# Linux
#------------------------------------------------------------------------
ifeq ($(UNAMES),Linux)
ESMF_ARCH = linux
# if the compiler is not specified, choose PGI pgf90
ifeq ($(USER_FC),$(null))
## FC := pgf90
FC := lf95
else
FC := $(USER_FC)
endif
# if USER_CC is set, use it. Otherwise use pgcc if pgf90 is the Fortran compiler,
# and cc if not
ifeq ($(USER_CC),$(null))
## ifeq ($(FC),pgf90)
ifeq ($(FC),lf95)
## CC := pgcc
CC := gcc
else
CC := cc
endif
else
CC := $(USER_CC)
endif
# Figure out the ESMF architecture.
# ifeq ($(FC),pgf90)
ifeq ($(FC),lf95)
# ifeq ($(CC),pgcc)
ifeq ($(CC),gcc)
ESMF_ARCH = linux_pgi
else
ESMF_ARCH = linux_gnupgf90
endif
endif
# if not using pgcc, define USE_GCC to disable threading in the timing library
CFLAGS = $(cpp_path) -c -DLINUX
ifeq ($(CC),pgcc)
## ifeq ($(CC),gcc)
CFLAGS += -fast
else
CFLAGS += -DUSE_GCC
## CFLAGS += -O
endif
# pgf90
# -DPGF90 is for phcs and gauaw which normally use r16 arithmetic but is unavailable under pgf90
ifeq ($(FC),pgf90)
# ifeq ($(FC),lf95)
FFLAGS = $(cpp_path) -c -r8 -i4 -DHIDE_SHR_MSG -Mrecursive -Mdalign -Mextend -mp -DLINUX \
-DPGF90 -I$(ESMF_MOD)/$(ESMF_ARCH)
F90FLAGS = $(FFLAGS) -Mfree
LDFLAGS = -mp
ifeq ($(DEBUG),TRUE)
FFLAGS += -g -Ktrap=fp -Mbounds
SPEC_FFLAGS := $(FFLAGS)
else
SPEC_FFLAGS := $(FFLAGS)
FFLAGS += -fast
endif
endif
# lf95
#
# Note that as of lf95 version 6.1 threading does NOT work because of
# ridiculously small per thread stacksize limits.
#
# -CcdRR8 is an undocumented flag which promotes only vars declared "real", not "real*8"
# --trace produces a call traceback on abort
# --trap causes code to stop on divide by zero or overflow exceptions
# --pca prevents overwriting constant arguments
# --staticlink enables transportability of the executable
# --chk for basic compiler checking (a,e,s,u,x)
# --chkglobal for global checking
ifeq ($(FC),lf95)
ESMF_ARCH = linux_lf95
FFLAGS = $(cpp_path) -c -CcdRR8 -DHIDE_SHR_MSG --trace --trap -DLINUX -I$(ESMF_MOD)/$(ESMF_ARCH)
SPEC_FFLAGS := $(FFLAGS)
F90FLAGS = $(FFLAGS)
LDFLAGS = --staticlink
ifeq ($(DEBUG),TRUE)
FFLAGS += -g --chk --pca
else
FFLAGS += -O
endif
endif
# FFC f90
ifeq ($(FC),f90)
FFLAGS = -CcdRR8 -Cpp -X9 -fw -Am -Wa,-W $(cpp_path) -c -DHIDE_SHR_MSG -DLINUX \
-I$(ESMF_MOD)/$(ESMF_ARCH)
LDFLAGS =
ifeq ($(DEBUG),TRUE)
FFLAGS += -g -H aseu
else
FFLAGS += -Kfast,eval,fastlib,auto
endif
endif
# Flags common to all compilers
ifeq ($(SPMD),TRUE)
FFLAGS += -I$(INC_MPI) -DNO_SHR_VMATH
LDFLAGS += -L$(LIB_MPI) -lmpich
else
FFLAGS += -DHIDE_MPI -DNO_SHR_VMATH
endif
.SUFFIXES:
.SUFFIXES: .F .F90 .c .o
ifeq ($(FC),pgf90)
# ifeq ($(FC),lf95)
#
# To fix hanging problem when using sld dynamics, compile sgexx without "-fast"
#
sgexx.o: sgexx.F
$(FC) $(SPEC_FFLAGS) $<
endif
ifeq ($(FC),lf95)
# lahey fails on binary_io due to writing wrap areas
binary_io.o: binary_io.F90
$(FC) $(SPEC_FFLAGS) $<
wrap_nf.o: wrap_nf.F90
$(FC) $(SPEC_FFLAGS) $<
wrap_mpi.o: wrap_mpi.F90
$(FC) $(SPEC_FFLAGS) $<
endif
.F90.o:
$(FC) $(F90FLAGS) $<
.F.o:
$(FC) -c $(FFLAGS) $<
.c.o:
$(CC) $(CFLAGS) $<
endif
#------------------------------------------------------------------------
# OSF1
#------------------------------------------------------------------------
ifeq ($(UNAMES),OSF1)
ESMF_ARCH := alpha
CFLAGS := $(cpp_path) -DOSF1 -O2 -omp
FC := f90
FFLAGS := $(cpp_path) -r8 -i4 -c -omp -automatic -fpe3 -I$(ESMF_MOD)/$(ESMF_ARCH)
FFLAGS_DOTF90 := -DHIDE_SHR_MSG -DOSF1 -free -fpe3 -DNO_SHR_VMATH
FFLAGS_DOTF := -extend_source -omp -automatic
LDFLAGS := -omp
ifeq ($(DEBUG),TRUE)
FFLAGS += -g3 -C
else
# Inline when not debugging
FFLAGS += -O3 -inline speed
endif
ifeq ($(NO_SWITCH),$(null))
NO_SWITCH := FALSE
endif
ifeq ($(SPMD),TRUE)
FFLAGS += -I$(INC_MPI)
LDFLAGS += -lmpi
else
FFLAGS += -DHIDE_MPI
endif
ifneq ($(NO_SWITCH),TRUE)
LDFLAGS += -lelan
endif
.SUFFIXES:
.SUFFIXES: .F .F90 .c .o
.F.o:
$(FC) $(FFLAGS) $(FFLAGS_DOTF) $<
.F90.o:
$(FC) $(FFLAGS) $(FFLAGS_DOTF90) $<
.c.o:
cc -c $(CFLAGS) $<
endif
#------------------------------------------------------------------------
# Targets/rules that depend on architecture specific variables.
#------------------------------------------------------------------------
# The ESMF library is not made to be built in parallel, so specify only one job is to run.
$(ESMF_LIB)/$(ESMF_ARCH)/libesmf.a:
cd $(ESMF_ROOT); \
$(MAKE) -j 1 BOPT=$(ESMF_BOPT) ESMF_BUILD=$(ESMF_BLD) ESMF_DIR=$(ESMF_ROOT) ESMF_ARCH=$(ESMF_ARCH);
time_manager.o : $(ESMF_LIB)/$(ESMF_ARCH)/libesmf.a
RM := rm
# Add user defined compiler flags if set, and replace FC if USER option set.
FFLAGS += $(USER_FFLAGS)
ifneq ($(USER_FC),$(null))
FC := $(USER_FC)
endif
clean:
$(RM) -r esmf
$(RM) -f Depends Srcfiles *.o *.mod *.stb *.f90 $(MODEL_EXEDIR)/$(EXENAME)
realclean: clean
include Depends
--Farrow_of_Piglets_883_000--