[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--