# Makefile to produce magnetospheric parallel code. # # NOTE: Unless you know what you're doing, you shouldn't be here! # See the Make targets in "LTR-para/Makefile" # # Include compiler information include ../../env/Make.${MACHINE} # Include resolution information include ../../common/helpers/Make.resolution # Include Make target (CFLAGS, LIBS, etc) information include Make.$(shell uname) .SUFFIXES: .F .c .o .f .C .c.o: $(MPICC) -c $(CFLAGS) $< .C.o: $(MPICXX) -c $(CCFLAGS) $< .F.o: $(MPIF90) -c $(FFLAGS) $< # # Include files # MS_H = MHD.h site-stuff.h mhd_params.h variables.h run-time.h I_H = ION.h ion_variables.h ion_P++_pointers.h MS_INC= param.inc help.inc mdims.inc twod.inc var.inc \ var1.inc var2.inc fortran_P++_arrays.inc \ mhd_P++_pointers.inc global_dims.inc bzero.inc \ meter.inc dipole.inc gcoef.inc rest_of_param.inc \ run-time.inc I_INC = ion-meter.inc ion-var.inc ion_P++_pointers.inc \ ion_fortran_P++_arrays.inc ion-param.inc gcoef.inc jpara.inc \ iongeo.inc ionconst.inc volts.inc ionC90.inc MSPHERE_INC = $(MS_H) $(MS_INC) ION_INC = $(I_H) $(I_INC) MIX_INC = # # Object files # ION_OBJS = ionosphere.o ion_fortran_arrays.o z2code.o iondump-para.o iontake-para.o \ curinterp.o subwts.o MHD_ION.o ION.o \ IonIO.o TimestepIonIO.o UTIonIO.o VPATH=interfaces MSPHERE_OBJS = MSPHERE.o MHD.o Courant.o Boundary.o THEREST.o \ mhd_fortran_arrays.o hack.o \ bound.o metric.o test-arrays.o zero.o \ hydro.o bfield.o ijmhd.o jkmhd.o kimhd.o \ dipole.o subdipol.o therest.o \ clips.o pdms.o highs.o \ hdfdump-para.o hdftake-para.o \ boundaries.o stringblank.o \ fcourant.o fixB.o date-ident.o second.o \ xmlInputReader.o init-fortran.o utio_namelist.o \ MHDManager.o TimestepMHD.o UTMHD.o MIX_OBJS = get_tilt.o MHDInnerBoundaryInterface.o CPL_IC_Interface.o CPL_FE_Interface.o RCM_OBJS = IM_Interface.o IM_IC_Interface.o IM_interpolation.o IM_interpolation_wrapper.o \ bdip.o subtract_dipole.o get_dip_moment.o IM_Interface.o: Average.h MSPHERE.o: Average.h # # Kludge to get revision number inside HDF files: # Remove .o & revision.inc to ensure that revision number gets updated every time LFM is re-compiled include ../../common/helpers/Make.version iondump-para.F: $(shell rm -f iondump-para.o revision.inc) revision.inc ; hdfdump-para.F: $(shell rm -f hdfdump-para.o revision.inc) revision.inc ; # # make targets # # # MSETUP -- used to create your own param.inc and ion-param.inc files for an arbitrary resolution specified in param.h # MSETUP: MSETUP.o MHD.C param.h $(MPICXX) -c MHD.C -DMSETUP $(CCFLAGS) -o MHD-setup.o $(MPICXX) $(LDFLAGS) MSETUP.o MHD-setup.o -o MSETUP $(LIBS) # # parallel MHD code no ionosphere # MHDCODE: $(MSPHERE_OBJS) $(MSPHERE_INC) $(MPICXX) $(LDFLAGS) $(MSPHERE_OBJS) -o MHDCODE $(LIBS) # # parallel MHDCODE with old ionosphere # LFM: links${NI}x${NJ}x${NK}-${NP} $(ION_OBJS) $(MSPHERE_OBJS) $(ION_INC) $(MSPHERE_INC) $(MPICXX) $(LDFLAGS) $(ION_OBJS) $(MSPHERE_OBJS) -o LFM-${NI}x${NJ}x${NK}-${NP} $(LIBS) # # LFM with MIX and RCM; disable RCM by setting coupling year to 9999 # LFM-MIX: links${NI}x${NJ}x${NK}-${NP} $(MIX_OBJS) $(RCM_OBJS) $(MSPHERE_OBJS) $(MIX_INC) $(MSPHERE_INC) $(MPICXX) $(LDFLAGS) $(MHD_OBJS) $(MSPHERE_OBJS) $(MIX_OBJS) $(RCM_OBJS) -o LFM-MIX-${NI}x${NJ}x${NK}-${NP} $(LIBS) mhd_fortran_arrays.o: mhd_fortran_arrays.F variables.h $(CPP) $(CDEFS) < mhd_fortran_arrays.F > mhd_fortran_arrays.f $(MPIF90) -c $(FFLAGS) mhd_fortran_arrays.f ion_fortran_arrays.o: ion_fortran_arrays.F ion_variables.h ion_P++_pointers.inc $(CPP) $(CDEFS) < ion_fortran_arrays.F > ion_fortran_arrays.f $(MPIF90) -c $(FFLAGS) ion_fortran_arrays.f ion_P++_pointers.inc: ion_P++_pointers.h @ echo "--------------------------------------------------------------------" @ echo "Did you set up processor resolution info?" @ echo "i.e. \"$(GMAKE) linksnixnjxnk-np\"" @ echo "You will get an error about missing \"ion-param.inc\" if you didn't..." @ echo "--------------------------------------------------------------------" $(CPP) $(CDEFS) < ion_P++_pointers.h > ion_P++_pointers.inc ionosphere.o: ionosphere.F ion_P++_pointers.inc ion_fortran_P++_arrays.inc \ dipole.inc volts.inc iongeo.inc ion-param.inc jpara.inc \ ion-meter.inc ionconst.inc gcoef.inc ion_fortran_arrays.o: ion_fortran_arrays.F ion_P++_pointers.inc ion-param.inc ######### # FIXME # ############################################# # The following tests should probably go in # # the"LTR-para/LFM-para/test" # directory! # ############################################# test-mpif: hdftake-para.F $(CPP) $(FDEFS) $(HDFINC) $(MPIINC) < hdftake-para.F > hdftake-para.f test-arrays.o: test-arrays.F ion_P++_pointers.inc test-partition: test-partition.o nonConforming.o ftest.o $(MPICXX) $(LDFLAGS) test-partition.o nonConforming.o ftest.o \ -o test-partition $(LIBS) test-local: test-local.o ftest.o $(MPICXX) $(LDFLAGS) test-local.C ftest.o -o test-local $(LIBS) test-serial: test-serial.C $(MPICXX) $(LDFLAGS) test-serial.o -o test-serial $(LIBS) PPP-test: PPP-test.o $(MPICXX) ($LDFLAGS) PPP-test.o -o PPP-test $(LIBS) # # Set up soft links to pre-computed param files in order to build MSPHERE # Format: links[ni]x[nj]x[nk]x[n_processors] # links${NI}x${NJ}x${NK}-${NP}: @$(eval PGRID=$(subst links,,$@)) @$(eval SGRID=$(firstword $(subst -, ,${PGRID}))) -@rm -f param.inc ion-param.inc param.h @ test -f param/param-${PGRID}.h || echo "Must define resolution ($${NI}, $${NJ}, $${NK}, $${NP}) understood by LFM. Consult the documentation." ln -s param/param-${PGRID}.h param.h ln -s param/param-${PGRID}.inc param.inc ln -s param/ion-param-${PGRID}.inc ion-param.inc test: ${MAKE} -f Make.test clean: rm -f *.o *.mod *.f ion_P++_pointers.inc revision.inc rm -f MSETUP MHDCODE rm -f interfaces/*.o cd startup && $(MAKE) clean ${MAKE} -f Make.test clean distclean: $(MAKE) clean cd startup && $(MAKE) distclean rm -f param.inc param*.h ion-param*.inc *~ rm -f LFM-*x*x*-* LFM-*x*x*-*