#!/bin/ksh #set -xv #- echo "This script must be run while in the modipsl/modeles/OPA directory" cd WORK pwd #MODEL_LIB=../../../lib/libopa.a #MODEL_LIB=`grep MODEL_LIB AA_make.ldef | sed 's/ //g' | sed 's/MODEL_LIB=//g' ` liste_cle=$(egrep '^# *if[!( &]*def|^# *elif' *.[Fh] *.[Fh]90 | grep key_ | sed 's/||/\ /' | sed 's/\&\&/\ /' | sed 's/^.*key_/key_/' | sed 's/ *[) ] *$//' | sort -u ) #- #- #- 3) Ecriture du AA_make #- #- enteteFait_AA_make #- cat > tampon < /dev/null #-Q- sx6nec @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null #-Q- sxdkrz @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null #-Q- hpux @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null @\$(A_C) \$(MODEL_LIB) \$*.o > /dev/null @\$(RM) \$*.[of] @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi #-Q- aix @mv \$(PREF)\$*.lst \$(PREF)\$*.L #-Q- linux @mv \$(PREF)\$*.lst \$(PREF)\$*.L #-Q- osxxlf @mv \$(PREF)\$*.lst \$(PREF)\$*.L @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi # rules for the .F90 files .F90.a : @\$(F_C) \$(P_P) \$(F_O) \\ #-Q- fjvpp -Z \$*.L \\ #-Q- sxnec -R2 \\ #-Q- sx6nec -R2 \\ #-Q- sxdkrz -R2 \\ #-Q- hpux -R2 \\ #-Q- aix -qsource \\ \$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; } #-Q- sxnec @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null #-Q- sx6nec @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null #-Q- sxdkrz @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null #-Q- hpux @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null @\$(A_C) \$(MODEL_LIB) \$*.o > /dev/null @\$(RM) \$*.[of] @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi #-Q- aix @mv \$(PREF)\$*.lst \$(PREF)\$*.L #-Q- linux @mv \$(PREF)\$*.lst \$(PREF)\$*.L #-Q- osxxlf @mv \$(PREF)\$*.lst \$(PREF)\$*.L @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi # rules for the .F files .F.a : @\$(F_C) \$(P_P) \$(F_O) \\ #-Q- fjvpp -Z \$*.L \\ #-Q- sxnec -R2 \\ #-Q- sx6nec -R2 \\ #-Q- sxdkrz -R2 \\ #-Q- hpux -R2 \\ #-Q- aix -qsource \\ \$*.F || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; } #-Q- sxnec @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null #-Q- sx6nec @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null #-Q- sxdkrz @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null #-Q- hpux @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null @\$(A_C) \$(MODEL_LIB) \$*.o > /dev/null @\$(RM) \$*.[of] @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi #-Q- aix @mv \$(PREF)\$*.lst \$(PREF)\$*.L #-Q- linux @mv \$(PREF)\$*.lst \$(PREF)\$*.L #-Q- osxxlf @mv \$(PREF)\$*.lst \$(PREF)\$*.L @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi # rules for the library from the .f files .f.a : @\$(F_C) \$(F_O) \\ #-Q- fjvpp -Z \$*.L \\ #-Q- sxnec -R2 \\ #-Q- sx6nec -R2 \\ #-Q- sxdkrz -R2 \\ #-Q- hpux -R2 \\ #-Q- aix -qsource \\ \$*.f|| { if [ -f \$(PREF)\$*.L ] ; then mv \$*.L \$(TMP) ; fi ; false ; exit ; } #-Q- sxnec @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null #-Q- sx6nec @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null #-Q- sxdkrz @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null #-Q- hpux @\$(A_X) \$(SXMODEL_LIB) \$*.o > /dev/null @\$(A_C) \$(MODEL_LIB) \$*.o > /dev/null @\$(RM) -f \$*.o #-Q- aix @mv \$(PREF)\$*.lst \$(PREF)\$*.L #-Q- linux @mv \$(PREF)\$*.lst \$(PREF)\$*.L #-Q- osxxlf @mv \$(PREF)\$*.lst \$(PREF)\$*.L @if [ -f \$(PREF)\$*.L ] ; then mv \$*.L \$(TMP) ; fi # end #- #- dependances #- exec 1> AA_make MAIN="model" echo '# $Header$' echo '# some variables' echo 'TMP = ../../../tmp' echo '#-Q- sxnec # Compiler options for the ORCA model - std' echo '#-Q- sxnec F_O = -dw -Wf\"-A idbl4\" -sx5 -ftrace -C vopt -Wf"-init stack=nan" -Wl"-f nan" -Wf"-P nh" -Wf,-pvctl noassume loopcnt=10000 -L transform -I $(MODDIR) -I $(MODDIR)/oce' echo '#-Q- sxnec L_X = $(L_O) $(L_C) -ftrace' echo '#-Q- sx6nec # Compiler options for the ORCA model - std' echo '#-Q- sx6nec F_O = -size_t64 -dw -Wf\"-A dbl4\" -sx6 -C vopt -Wf"-P nh" -Wf',-pvctl noassume loopcnt=10000 -L transform' -I $(MODDIR) -I $(MODDIR)/oce' echo '#-Q- sx6nec F_O = -size_t64 -dw -Wf\"-A dbl4\" -sx6 -ftrace -C vopt -Wf"-init stack=nan" -Wl"-f nan" -Wf"-P nh" -Wf,-pvctl noassume loopcnt=10000 -L transform -I $(MODDIR) -I $(MODDIR)/oce' echo '#-Q- sx6nec L_X = $(L_O) $(L_C) -ftrace' echo '#-Q- sxdkrz # Compiler options for the ORCA model for the DKRZ SX6-NEC ' echo '#-Q- sxdkrz F_O = -ew -sx6 -ftrace -C vopt -Wf"-init stack=nan" -Wl"-f nan" -Wf"-P nh" -Wf"-pvctl noassume loopcnt=10000" -L transform -I $(MODDIR) -I $(MODDIR)/oce' echo '#-Q- sxdkrz L_X = $(L_O) $(L_C) -ftrace' echo '#-Q- hpux # Compiler options for the ORCA model for the ES' echo '#-Q- hpux # for super perfs!' echo '#-Q- hpux # F_O = $(FTRACE) -pi nest=5 line=10000 expin=Fmpplib.F -Wf,-A idbl4 -C hopt -Wf"-P nh" -Wf,-pvctl noassume loopcnt=10000 -L transform -I $(MODDIR) -I $(MODDIR)/oce' echo '#-Q- hpux # regular options!' echo '#-Q- hpux F_O = $(FTRACE) -Wf,-A idbl4 -C vopt -P stack -Wf"-P nh" -Wf,-pvctl noassume loopcnt=10000 -L transform -Wf,-pvctl nomsg -Wf"-O nomsg" -I $(MODDIR) -I $(MODDIR)/oce' echo '#-Q- hpux L_X = $(L_O)' echo '#-Q- linux # Compiler options for the ORCA model (pgf version)' echo '#-Q- linux F_O = -Mlist -O3 -byteswapio -r8 -I $(MODDIR) -I$(MODDIR)/oce' echo '#-Q- linux L_X = -r8 -O3' echo '#-Q- lxiv8 # Compiler options for the ORCA model (ifort version)' echo '#-Q- lxiv8 F_O = -O3 -r8 -I $(MODDIR) -I$(MODDIR)/oce' echo '#-Q- lxiv8 L_X = -r8 -O3' echo '#-Q- g95 # Compiler options for the ORCA model (g95 version)' echo '#-Q- g95 F_O = -O3 -fno-second-underscore -r8 -funroll-all-loops -I $(MODDIR) -I $(MODDIR)/oce' echo '#-Q- g95 L_X = -r8 -O3' echo '#-Q- aix # Compiler options for the ORCA model (aix version)' echo '#-Q- aix F_O = -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qextname -qsource -q64 -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/oce' echo '#-Q- aix L_O = $(F_P) -q64 -O3' echo '#-Q- aix L_X = $(L_O) $(L_C) ' echo '#-Q- osxxlf # Compiler options for the ORCA model (osxxlf version)' echo '#-Q- osxxlf F_O = -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qsource -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/oce' echo '#-Q- osxxlf L_X = -qrealsize=8 -O3' echo 'PREF=' echo '#-Q- sxnec PREF=i.' echo '#-Q- sx6nec PREF=i.' echo '#-Q- sxdkrz PREF=i.' echo '#-Q- hpux PREF=i.' echo '' # Write the cpp key list with one key by line echo 'KEY_LIST = \c' for i in ${liste_cle} do echo "\\" echo " $i \c" done echo '' echo '# .o file list in the library' echo 'LIB_OBJ = \c' # # allons chercher tous les .f du repertoire courant # construction de la liste des objets LIB_OBJ for i in `ls *.f` do bn=`basename $i .f` if [ "${bn}" != "${MAIN}" ] then echo "\\" echo " \$(MODEL_LIB)($bn.o)\c" fi done # allons chercher tous les .f90 du repertoire courant # construction de la liste des objets LIB_OBJ # one dependancy by line for i in `ls *.f90` do bn=`basename $i .f90` if [ "${bn}" != "${MAIN}" ] then echo "\\" echo " \$(MODEL_LIB)($bn.o)\c" fi done # allons chercher tous les .F90 du repertoire courant # construction de la liste des objets LIB_OBJ for i in `ls *.F90` do bn=`basename $i .F90` if [ "${bn}" != "${MAIN}" ] then echo "\\" echo " \$(MODEL_LIB)($bn.o)\c" fi done # allons chercher tous les .F du repertoire courant # construction de la liste des objets LIB_OBJ for i in `ls *.F` do bn=`basename $i .F` if [ "${bn}" != "${MAIN}" ] then echo "\\" echo " \$(MODEL_LIB)($bn.o)\c" fi done echo "" cat tampon rm tampon # for fic in `ls *.f90 *.F90 *.F ` do if [ "${fic}" != "${MAIN}.[Ff]" ] then i=0 j=0 dep="" inc="" inc2="" inc3="" luse0="" luse1="" luse2="" luse3="" # on cherche les includes type modele de glace LLN for inc in `sed -n 's/^[ ]*[iI][nN][cC][lL][uU][dD][eE][ ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u` do dep="$dep\n$inc" done # on cherche les includes (et les includes des includes et ainsi de suite pour 3 niveaux max) for inc in `sed -n 's/^#[ ]*[iI][nN][cC][lL][uU][dD][eE][ ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u` do j=1 dep="$dep\n$inc" for inc2 in `sed -n 's/^#[ ]*[iI][nN][cC][lL][uU][dD][eE][ ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u` do dep="$dep\n$inc2" # on cherche les include dans le fichier deja include (3eme niveau! balaise!) for inc3 in `sed -n 's/^#[ ]*[iI][nN][cC][lL][uU][dD][eE][ ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc2 | sort -u` do dep="$dep\n$inc3" done done done # on cherche les USE dans les include for inc in `sed -n 's/^#[ ]*[iI][nN][cC][lL][uU][dD][eE][ ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u` do for fuse0 in `sed -n 's/^[ ]*[uU][sS][eE] [ ]*\([^!,;]*\).*/\1/p' $inc | sort -u` do if [ $fuse0 != "ioipsl" ] then lfuse0=$fuse0.f90 [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90 luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)" fi done # on cherche aussi les USE dans les include des include on les ajoute a luse0 for inc2 in `sed -n 's/^#[ ]*[iI][nN][cC][lL][uU][dD][eE][ ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u` do for fuse0 in `sed -n 's/^[ ]*[uU][sS][eE] [ ]*\([^!,;]*\).*/\1/p' $inc2 | sort -u` do if [ $fuse0 != "ioipsl" ] then lfuse0=$fuse0.f90 [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90 luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)" fi done done done # on cherche les USE (et les USE des USE et ainsi de suite pour 3 niveaux max) for fuse1 in `sed -n 's/^[ ]*[uU][sS][eE] [ ]*\([^!,;]*\).*/\1/p' $fic | sort -u` do if [ $fuse1 != "ioipsl" ] then lfuse1=$fuse1.f90 [ -f $fuse1.F90 ] && lfuse1=$fuse1.F90 luse1="$luse1\n$lfuse1\n\$(MODEL_LIB)($fuse1.o)" for fuse2 in `sed -n 's/^[ ]*[uU][sS][eE] [ ]*\([^!,;]*\).*/\1/p' $lfuse1 | sort -u` do if [ $fuse2 != "ioipsl" ] then lfuse2=$fuse2.f90 [ -f $fuse2.F90 ] && lfuse2=$fuse2.F90 luse2="$luse2\n$lfuse2\n\$(MODEL_LIB)($fuse2.o)" # on cherche les USE dans le fichier deja USE (3eme niveau! balaise!) for fuse3 in `sed -n 's/^#[ ]*[uU][sS][eE] [ ]*\([^!,;]*\).*/\1/p' $lfuse2 | sort -u` do if [ $fuse3 != "ioipsl" ] then luse3="$luse3\n$lfuse3\n\$(MODEL_LIB)($fuse3.o)" fi done fi done fi done #- la variable dep contient l'ensemble des dependances mais peut-etre en double ou plus #- for depele in `echo $luse3 | sort -u` `echo $luse2 | sort -u` `echo $luse1 | sort -u` `echo $luse0 | sort -u` `echo $dep | sort -u` do [ ${i} = "0" ] && echo "\$(MODEL_LIB)(`echo $fic|awk -F. '{print $1}'`.o) : \c" echo "\\" echo " $depele \c" let i=i+1 # pour signaler le premier done #- #- on ajoute la dependance avec la librairie ioipsl si besoin cad si le source contient use ioipsl grep -i 'use *ioipsl' ${fic} >/dev/null && ( echo "\\" ; echo " ../../../lib/libioipsl.a \c") #- on ajoute la dependance avec KEY_CPP si il y a des include cpp if [ ${j} != "0" ] then echo "\\" echo " KEY_CPP \c" fi #- on finit la dependance avec le fichier lui-meme et on ecrit les regles de creation if [ ${i} != "0" ] then echo "\\" echo " $fic" fi fi echo $fic done >/dev/tty done echo '# key changing control' echo "key: " echo " @echo CHANGEMENT de CLES CPP oui/non ?" echo " -@if [ \"\`cat KEY_CPP\`\" != \"\$(P_P)\" ] ; then \\" echo " echo CPP options changed ; echo \"\$(P_P)\" > KEY_CPP ; fi " #- # # regle pour verifier les cles # EK novembre 2000 # adaptation : ED + MAF decembre 2000 # echo echo "keyverif:" echo ' @echo VERIFICATION DES CLES' echo ' @echo CLES UTILISEES : ' echo ' @for v in ` echo $(P_P) | sed -e s/-Wp,-D//g` ; \' echo ' do \' echo ' echo $$v ;\' echo ' w=`echo $$v | cut -c1-3` ; \' echo ' if [ $$w = `echo "key"` ] ; then \' echo ' r=n ; \' echo ' echo " $(KEY_LIST) " | (grep $$v >/dev/null 2>&1) || r=o ; \' echo ' if [ $$r != "n" ] ; then \' echo ' echo "UNKNOWN KEY" ;\' echo ' false ; \' echo ' exit ; \' echo ' fi \' echo ' fi \' echo ' done' # Checking if the number of routines have been changed echo '# Checking the number of routines' echo "src_file_list: " echo ' @echo CHECKING THE NUMBER AND NAMES OF SOURCE FILES ' echo ' @\$(RM) `ls | fgrep -v -f .patron` ' echo ' @check=`grep OPA_SRC .config` ; \' echo ' if [ -n "$$check" ] ; then \' echo ' echo " use OPA_SRC files" ; \' echo ' ln -sf ../OPA_SRC/*.[Ffh]90 . ; \' echo ' ln -sf ../OPA_SRC/DYN/*.[Ffh]90 . ; \' echo ' ln -sf ../OPA_SRC/TRA/*.[Ffh]90 . ; \' echo ' ln -sf ../OPA_SRC/TRD/*.[Ffh]90 . ; \' echo ' ln -sf ../OPA_SRC/DIA/*.[Ffh]90 . ; \' echo ' ln -sf ../OPA_SRC/DOM/*.[Ffh]90 . ; \' echo ' ln -sf ../OPA_SRC/OBC/*.[Ffh]90 . ; \' echo ' ln -sf ../OPA_SRC/FLO/*.[Ffh]90 . ; \' echo ' ln -sf ../OPA_SRC/LDF/*.[Ffh]90 . ; \' echo ' ln -sf ../OPA_SRC/ZDF/*.[Ffh]90 . ; \' echo ' ln -sf ../OPA_SRC/SOL/*.[Ffh]90 . ; \' echo ' ln -sf ../OPA_SRC/DTA/*.[Ffh]90 . ; \' echo ' ln -sf ../OPA_SRC/SBC/*.[Ffh]90 . ; \' echo ' fi ' echo ' @check=`grep LIM_SRC .config` ; \' echo ' if [ -n "$$check" ] ; then \' echo ' echo " use LIM_SRC files" ; \' echo ' ln -sf ../LIM_SRC/*.[Ffh]90 . ; \' echo ' fi ' echo ' @check=`grep C1D_SRC .config` ; \' echo ' if [ -n "$$check" ] ; then \' echo ' echo " use C1D_SRC files" ; \' echo ' ln -sf ../C1D_SRC/*.[Ffh]90 . ; \' echo ' fi ' echo ' @check=`grep TOP_SRC .config` ; \' echo ' if [ -n "$$check" ] ; then \' echo ' echo " use TOP_SRC files" ; \' echo ' \$(RM) trcstp.F90 ; \' echo ' \$(RM) sms.F90 ; \' echo ' \$(RM) initrc.F90 ; \' echo ' ln -sf ../TOP_SRC/*.[Ffh]90 . ; \' echo ' ln -sf ../TOP_SRC/SMS/*.[Ffh] . ; \' echo ' ln -sf ../TOP_SRC/SMS/*.[Ffh]90 . ; \' echo ' ln -sf ../TOP_SRC/TRP/*.[Ffh]90 . ; \' echo ' fi ' echo ' @check=`grep OFF_SRC .config` ; \' echo ' if [ -n "$$check" ] ; then \' echo ' echo " use OFF_SRC files" ; \' echo ' ln -sf ../OFF_SRC/*.[Ffh]90 . ; \' echo ' ln -sf ../OFF_SRC/*/*.[Ffh]90 . ; \' echo ' fi ' echo ' @\$(RM) tmplist' echo ' @ls -1 | fgrep -v -f .patron >tmplist' echo ' @cmp tmplist SRC_FILE_LIST.temp || { echo some routines have been added or suppressed ; \' echo ' sdiff -s tmplist SRC_FILE_LIST.temp ; cp tmplist SRC_FILE_LIST.temp ; \' echo ' \$(RM) model.o \$(MODEL_LIB) \$(SXMODEL_LIB) \$(EXEC_BIN) ; \' echo ' echo "Rebuilding the AA_make files" ; \' echo ' cd .. ; ../UTIL/fait_AA_make ; echo " " ; \' echo ' echo "THE ins_make COMMAND in modipsl/util MUST BE RERUN PLEASE DO SO BEFORE gmake" ; \' echo ' echo "========================================== " ; \' echo ' ../../util/ins_make ; echo " " ; false ; exit ; }'