source: trunk/MESOSCALE/LMD_MM_MARS/makemeso @ 236

Last change on this file since 236 was 235, checked in by aslmd, 14 years ago

MESOSCALE: corrected runmeso and gcm initialization so that it could be used on GNOME ifort cluster and virtually everywhere. changed choice numbering and added choices to initialize but not execute (good for job submission). Also corrected what was broken in the two previous commits on the version of the mesoscale model with old physics

  • Property svn:executable set to *
File size: 32.1 KB
Line 
1#! /bin/bash
2
3
4##################################
5# makemeso allows you to compile #
6# WRF with modified LMD physics  #
7##################################
8
9##############################
10# Author: A. Spiga           #
11# New version : October 2008 #
12# Last update : January 2009 #
13#               November  09 #
14#               January   11 #
15##############################
16
17###############################
18#### Type makemeso -h for help
19###############################
20
21
22
23##############################################################################################
24##############################################################################################
25##############################################################################################
26##############################################################################################
27
28donotcompile=0
29donotallow=0
30config=''
31donotcompilephys=0
32justphys=0
33debug=0
34fresh_start=0
35phys=""
36scenario=""
37while getopts "drc:njhgpfs:x" options; do
38  case $options in
39   d ) donotcompile=1;;       ## just to check the compile folder
40   r ) donotallow=1;;         ## allow only known config (useful with 'makemeso < last')
41   c ) config="${OPTARG}";;   ## idealized cases
42   n ) donotcompilephys=1;;   ## do not recompile physics
43   j ) justphys=1;;           ## just compile LMD physics
44   g ) debug=1;;              ## debug mode
45   p ) phys="newphys_";;      ## with new physics
46   f ) fresh_start=1;;        ## a fresh start
47   s ) scenario="${OPTARG}";; ## a specific scenario, you need a corresponding "mars_lmd_..."
48   x ) donotcompile=1;phys="nophys_";donotcompilephys=1;; ## a case with no LMD physics included
49   h ) echo "
50# Use:   
51#
52# makemeso                   ## basic use (real-case configuration)
53#
54# makemeso -d                ## no compilation, just check the name of the compile folder
55#
56# makemeso -c ideal          ## idealized mode (convective cell, mountain wave, etc...)
57# makemeso -c les            ## large-eddy simulations mode based on WRFV3
58#
59# makemeso -n                ## do not recompile LMD physics (must have been compiled before)
60#
61# makemeso < last            ## basic use + skip questions [! script must have been executed at least once]
62# makemeso -r < last         ## basic use + skip questions + only known config
63# makemeso -nr < last        ## basic use + skip questions + only known config + no LMD phys recompile
64#
65# makemeso -j                ## just compile the LMD physics
66#
67# makemeso -g                ## debug mode
68#
69# makemeso -h                ## display options
70#
71# makemeso -p                ## with new LMD physics
72#
73# makemeso -f                ## fresh start [clean -a]
74#
75# makemeso -s storm          ## a specific scenario, you need a corresponding mars_lmd_... (only for newphys)
76#
77# makemeso -x                ## a case with no LMD physics included
78" ; exit ;;
79  esac
80done   
81
82#--------------
83# talk w/ user
84#--------------
85  echo '****************************************'
86  echo ' LMD Mesoscale Model Compiler. Welcome.'
87  echo '****************************************'
88  if [[ "${phys}" == "newphys_" ]]
89  then
90    echo '***********with new physics*************'
91    echo '****************************************'
92  fi
93  # computer
94  uname -a | grep x86_64 > /dev/null
95  if [[ "$?" == 0 ]]
96  then
97    machine='64'
98  else
99    machine='32'
100  fi
101  # compiler
102  echo "Supported compiler options are "
103  echo "       <1> pgf90"
104  echo "       <2> g95"
105  echo "       <3> pgf90 + mpi"
106  echo "       <4> ifort"
107  echo "       <5> ifort + mpi"
108  echo "       <7> xlf + mpi (IBM AIX)"
109  echo "Your choice ?" ; read reply
110  case ${reply} in
111    1) compilo='pgf' ; numproc=1 ;;
112    2) compilo='g95' ; numproc=1 ;;
113    3) compilo='mpi'
114       if [[ "${WHERE_MPI}" = "" ]]
115       then
116         echo Please initialize the variable WHERE_MPI in your environnement
117         exit
118       fi
119       echo How many processors ? e.g. 1, 2, 4, 6, 8, 12, 16, 20, 24, 32, 64, 128 ; read numproc ;;
120    4) compilo='ifort' ; numproc=1 ;;
121    5) compilo='mpifort' ; echo How many processors ? e.g. 1, 2, 4, 6, 8, 12, 16, 20, 24, 32, 64, 128 ; read numproc ;;
122    7) compilo='mpixlf' ; echo How many processors ? e.g. 1, 2, 4, 6, 8, 12, 16, 20, 24, 32, 64, 128 ; read numproc ;;
123### for tests
12499) compilo='gnu' ; numproc=1 ;;
125    *) echo not supported by this script ; exit ;;
126  esac
127  # dimensions
128  if [ ${donotcompile} -eq 0 ]
129  then   
130  echo Grid points in longitude ? ; read lon
131  echo Grid points in latitude ? ; read lat
132  echo Number of vertical levels ? ; read level
133  fi
134  echo Number of domains ? ; read dom
135
136###PB lecture dom si < last
137
138    case ${dom} in
139       1) single='_single' ;;
140       *) single='_nest' ;;
141    esac
142      if [ "${compilo}" = "mpi" -o "${compilo}" = "mpifort" -o "${compilo}" = "mpixlf" ]
143      then
144           single=''
145      fi
146
147testflag=''
148####
149#testflag='_test'
150####
151
152    conf_wrf="${config}${scenario}${phys}${compilo}_${machine}${single}${testflag}"
153    \rm what_folder 2> /dev/null
154    echo ${conf_wrf} > what_folder
155         if [ ${donotcompile} -eq 1 ]
156         then
157            #\rm what_folder 2> /dev/null
158            #echo '**********************'
159            #echo '*** Your folder is ...'
160            #echo '**********************'
161            #echo ${conf_wrf} | tee what_folder
162            #cat what_folder
163            #echo ${conf_wrf} > what_folder
164            #echo ${reply} > what_compilo
165            #echo ${numproc} > what_numproc
166            if [[ "${phys}" != "nophys_" ]]
167            then
168              exit
169            fi
170         else
171            echo Number of tracers ? ; read tra
172            if [ ${tra} -eq 0 ]
173            then
174              tra=1     
175            fi
176            if [[ "${phys}" == "newphys_" ]]
177            then
178              echo "How many types of scatterer are you using ? 1 [dust] or 2 [dust + water ice]" ; read scat
179            else
180              scat=1 ## dummy stuff
181            fi
182         fi
183  # folder
184  mkdir ${conf_wrf} 2> /dev/null
185  if [[ "$?" == 0 ]]
186  then
187    echo new folder ... link sources
188    if [[ "${phys}" == "newphys_" ]]
189    then
190     \rm copy_model_tmp > /dev/null
191        if [[ "${scenario}" == "" ]]
192        then
193          sed s+"mars_lmd"+"mars_lmd_new"+g             SRC/SCRIPTS/copy_model > copy_model_tmp
194        else
195          echo SCENARIO ${scenario} DID YOU INCLUDE THE SPECIFIC folder ? ; read dummy
196          sed s+"mars_lmd"+"mars_lmd_new_${scenario}"+g SRC/SCRIPTS/copy_model > copy_model_tmp
197             if [[ "${config}" == "les" ]]
198             then
199              echo "NOT SUPPORTED, check options"
200              exit
201             fi
202        fi
203        if [[ "${config}" == "les" ]]
204        then
205         sed s+"PWD/SRC/"+"PWD/SRC/LES/"+g copy_model_tmp > yeah
206         mv yeah copy_model_tmp
207        fi
208     chmod 755 copy_model_tmp
209     ./copy_model_tmp
210     \rm copy_model_tmp
211     mv zeWRFV2 ${conf_wrf}/WRFV2
212     cd ${conf_wrf}/WRFV2
213        if [[ "${scenario}" == "" ]]
214        then
215          ln -sf mars_lmd_new             mars_lmd
216        else
217          ln -sf mars_lmd_new_${scenario} mars_lmd
218          cp ../../SRC/WRFV2/mars_lmd_new_${scenario}/Registry.EM mars_lmd_new_${scenario}/
219          cp ../../SRC/WRFV2/mars_lmd_new_${scenario}/*.inc mars_lmd_new_${scenario}/
220          cd Registry ; ln -sf ../mars_lmd_new_${scenario}/Registry.EM . ; cd ..
221        fi
222     #ln -sf meso_callkeys_newphys.h meso_callkeys.h
223     cd Registry ; Registry.bash ; cd ..
224    else
225         if [[ "${config}" == "les" ]]
226         then
227           ### NB: With physics: LES folder // Without physics : LESnophys_ folder
228           ### ---- because differences in 'modif' folder ----
229           sed s+"PWD/SRC/"+"PWD/SRC/LES$phys/"+g SRC/SCRIPTS/copy_model > copy_model_tmp
230         else
231           cp SRC/SCRIPTS/copy_model copy_model_tmp
232         fi   
233     chmod 755 copy_model_tmp
234     ./copy_model_tmp
235     \rm copy_model_tmp
236     mv zeWRFV2 ${conf_wrf}/WRFV2
237     cd ${conf_wrf}/WRFV2
238     cd Registry ; Registry.bash ; cd ..
239     fi
240          #### sparadrap consequent a l'utilisation de copy_model pour les liens
241          #### -- car alors il manque fftpack
242          if [[ "${config}" == "les" ]]
243          then
244            if [[ "${phys}" == "nophys_" ]]
245            then
246              ## voir ci-dessus pour le folder
247              cp ../../SRC/LES$phys/correcfft ./
248            else
249              cp ../../SRC/LES/correcfft ./
250            fi 
251            ./correcfft
252            \rm correcfft
253          fi
254  else
255    cd ${conf_wrf}/WRFV2
256    if [ ${fresh_start} -eq 1 ]
257    then
258      echo '*** FRESH START, I clean everything'
259      clean -a > /dev/null 2> /dev/null
260      cd Registry ; mv Registry Registry.bak ; Registry.bash ; cd ..
261      answer='y' ## a voir... pas si sur
262    else
263            if [[ "${phys}" != "nophys_" ]]
264            then
265      echo Did you modify anything in the Registry or clean ? y for yes, any key for no ; read answer
266      case ${answer} in
267        y) cd Registry ; mv Registry Registry.bak ; Registry.bash ; cd .. ;;
268        *) answer='no' ;;
269      esac
270            fi
271    fi
272  fi
273
274  # summary
275  echo '**********************'
276  echo '*** Your folder is ...'
277  echo '**********************'
278  echo ${conf_wrf}
279  echo '**********************'
280  echo '****************************************'
281  echo so ...
282  echo your computer is ${machine} bits
283  echo ${compilo} is your compiler
284       if [[ "${compilo}" = "mpi" ]]
285       then
286         echo MPICH is in ${WHERE_MPI}
287       fi
288  echo you will use ${numproc} processors
289  echo you have ${lon} x points
290  echo '         '${lat} y points
291  echo '         '${level} z points
292  echo '         '${dom} domains
293  echo '         '${tra} tracers
294  if [[ "${phys}" == "newphys_" ]]
295  then
296    echo '         '${scat} scatterers
297  fi
298  echo '****************************************'
299  # save answer
300  \rm last 2> /dev/null
301  touch last
302  echo ${reply} >> last
303     if [ "${compilo}" = "mpi" -o "${compilo}" = "mpifort" -o "${compilo}" = "mpixlf" ]
304     then
305     echo ${numproc} >> last
306     fi
307  echo ${lon} >> last
308  echo ${lat} >> last
309  echo ${level} >> last
310  echo ${dom} >> last
311  echo ${tra} >> last
312  echo ${scat} >> last
313  echo ${answer} >> last
314
315#------------
316# log files
317#------------
318  \rm log_compile 2> /dev/null
319  \rm log_error 2> /dev/null
320
321#-----------------
322# configure WRF
323#-----------------
324  mv configure.wrf configure.wrf.bak 2> /dev/null
325  ########################
326  conf_wrf_forall="${compilo}_${machine}${single}${testflag}"
327
328         #### in this case options are different because for LES, WRFV3 is used
329         if [[ "${config}" == "les" ]]
330         then
331         conf_wrf_forall="${config}${compilo}_${machine}${single}${testflag}"
332         fi
333
334  case ${conf_wrf_forall} in
335
336     #######LES-specific (WRFV3-based) -- previously in 'makeles'
337     #######
338
339     lesmpi_64)        ## MPI (dm) 64 bits [PS: remplacer 3 par 4 pour openMP]
340                       \rm conf > /dev/null 2> /dev/null ; touch conf ; echo 3 >> conf ; echo 1 >> conf
341                       \rm configure.wrf > /dev/null 2> /dev/null ; ./configure < conf > /dev/null 2> /dev/null
342                       sed s+"-lnetcdf"+"-lnetcdf -L../mars_lmd/libo -llmd"+g   configure.wrf > yeah ; mv -f yeah configure.wrf
343                       if [[ "$(hostname)" == "ciclad1.ipsl.jussieu.fr" ]]
344                       then
345            echo "SPECIFIC CHANGES FOR CICLAD CLUSTER. EDIT makemeso IF YOU ENCOUNTER PROBLEMS."
346            #sed s+"mpif90 -f90=$(SFC)"+"/usr/lib64/openmpi/1.4.2-pgf/bin/mpif90"+g                      configure.wrf > yeah ; mv -f yeah configure.wrf
347            #sed s+"mpicc -cc=$(SCC)"+"/usr/lib64/openmpi/1.4.2-gfortran/bin/mpicc -DMPI2_SUPPORT"+g     configure.wrf > yeah ; mv -f yeah configure.wrf
348            sed s+"mpif90 -f90=\$(SFC)"+"/usr/lib64/openmpi/1.4.3-pgfgcc/bin/mpif90"+g                   configure.wrf > yeah ; mv -f yeah configure.wrf
349            sed s+"mpicc -cc=\$(SCC)"+"/usr/lib64/openmpi/1.4.3-pgfgcc/bin/mpicc -DMPI2_SUPPORT"+g       configure.wrf > yeah ; mv -f yeah configure.wrf
350                       else
351            sed s+"mpif90"+"$WHERE_MPI/mpif90"+g                 configure.wrf > yeah ; mv -f yeah configure.wrf
352            sed s+"mpicc"+"$WHERE_MPI/mpicc -DMPI2_SUPPORT"+g    configure.wrf > yeah ; mv -f yeah configure.wrf
353                       fi
354                       sed s+"-fastsse"+" "+g                               configure.wrf > yeah ; mv -f yeah configure.wrf
355                          ### pas forcement necessaire ici mais OK
356                          sed s+"-llmd"+"-llmd $NETCDF/lib/libnetcdf.a"+g     configure.wrf > yeah ; mv -f yeah configure.wrf
357                       \rm conf > /dev/null ;;
358
359     lesmpifort_64)    ## MPI (dm) 64 bits IFORT
360                       \rm conf > /dev/null 2> /dev/null ; touch conf ; echo 7 >> conf ; echo 1 >> conf
361                       \rm configure.wrf > /dev/null 2> /dev/null ; ./configure < conf > /dev/null 2> /dev/null
362                       sed s+"-lnetcdf"+"-lnetcdf -L../mars_lmd/libo -llmd"+g   configure.wrf > yeah ; mv -f yeah configure.wrf
363                       sed s+"mpif90"+"$WHERE_MPI/mpif90"+g                 configure.wrf > yeah ; mv -f yeah configure.wrf
364                       sed s+"mpicc"+"$WHERE_MPI/mpicc -DMPI2_SUPPORT"+g    configure.wrf > yeah ; mv -f yeah configure.wrf
365                       sed s+"-fastsse"+" "+g                               configure.wrf > yeah ; mv -f yeah configure.wrf
366                       sed s+"-llmd"+"-llmd $NETCDF/lib/libnetcdf.a"+g     configure.wrf > yeah ; mv -f yeah configure.wrf
367                       \rm conf > /dev/null ;;
368
369     #######
370     #######LES-specific (WRFV3-based) -- previously in 'makeles'   
371
372#######TEST TEST
373                     # GFORTRAN, 64 bits, no nesting     
374     gnu_64_single)    cd arch ; ln -sf ../configure.defaults.gfortran64 configure.defaults ; cd ..
375                       echo 15 | configure > log_compile 2> log_error
376                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf 
377                       sed s+"-L../mars_lmd/libo -llmd"+"-L../mars_lmd/libo -llmd $NETCDF/lib/libnetcdf.a"+g configure.wrf > yeah ; mv -f yeah configure.wrf ;;
378#######TEST TEST
379                     # PGF90, 32 bits, no nesting
380     pgf_32_single)    echo 1 | configure > log_compile 2> log_error
381                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
382                     # PGF90, 32 bits, nesting
383     pgf_32_nest)      echo 2 | configure > log_compile 2> log_error
384                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
385                     # PGF90, 64 bits, no nesting
386     pgf_64_single)    echo 1 | configure > log_compile 2> log_error
387                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
388                     # PGF90, 64 bits, nesting
389     pgf_64_nest)      cd arch ; ln -sf ../configure.defaults.fix64nest configure.defaults ; cd ..
390                       echo 4 | configure > log_compile 2> log_error
391                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
392                     # G95, 32 bits, no nesting
393     g95_32_single)    echo 13 | configure > log_compile 2> log_error
394                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
395                     # G95, 64 bits, no nesting  ### we modify configure.defaults to add x86_64 next to g95 in the header comment
396     g95_64_single)    cd arch ; sed s/"PC Linux i486 i586 i686, g95 compiler"/"PC Linux i486 i586 i686 x86_64, g95 compiler"/g configure.defaults > yeahyeahyeah ; rm configure.defaults ; mv yeahyeahyeah configure.defaults ; cd ..
397                       echo 14 | configure > log_compile 2> log_error
398                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
399                       #sed s+"=       g95"+"=       /home/physastro/aspiga/mysoft/g95/g95-install/bin/x86_64-unknown-linux-gnu-g95"+g configure.wrf > yeah ; mv -f yeah configure.wrf;;
400                     # IFORT, 64 bits, no nesting
401     ifort_64_single)  echo 5 | configure > log_compile 2> log_error
402                       sed s+"-DIFORT_KLUDGE"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
403                         ## !!! NETCDF must be defined
404                         sed s+"lio_grib_share"+"lio_grib_share -L../mars_lmd/libo -llmd $NETCDF/lib/libnetcdf.a"+g configure.wrf > yeah
405                         mv -f yeah configure.wrf ;;
406     mpifort_64)     # MPI+IFORT, 64 bits, no nesting / nesting
407                       echo 9 | configure > log_compile 2> log_error
408                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf
409                       sed s+"-f90=ifort"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
410                       sed s+"-cc=icc"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
411                       sed s+"-DIFORT_KLUDGE"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
412                       sed s+"O3"+"O2"+g configure.wrf > yeah ; mv -f yeah configure.wrf
413                                        #sed s+"O3"+"O0"+g configure.wrf > yeah ; mv -f yeah configure.wrf  ### pour compilation rapide
414                                        #-w -ftz -align all -fno-alias -fp-model precise >>> options indiquees dans WRF3
415                                        #http://software.intel.com/en-us/articles/performance-tools-for-software-developers-building-wrf-with-the-intel-compilers/
416                            #### NB: RSL is replaced by RSL_LITE, better memory capacity, less seg fault
417                            sed s+"../external/RSL/RSL"+"../external/RSL_LITE"+g configure.wrf > yeah ; mv -f yeah configure.wrf
418                            sed s+"-DWRF_RSL_IO"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
419                            sed s+"-DRSL"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
420                            sed s+"librsl.a"+"librsl_lite.a"+g configure.wrf > yeah ; mv -f yeah configure.wrf
421                            sed s+"../external/RSL/gen"+"../external/RSL_LITE/gen"+g configure.wrf > yeah ; mv -f yeah configure.wrf
422                            sed s+"../external/RSL/module"+"../external/RSL_LITE/module"+g configure.wrf > yeah ; mv -f yeah configure.wrf
423                            sed s+"-lrsl"+"-lrsl_lite"+g configure.wrf > yeah ; mv -f yeah configure.wrf
424                            sed s+"linux"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
425                         ### necessary even if mpi-selector is used (no need in makegcm though)
426                         sed s+"mpif90"+"${WHERE_MPI}/mpif90"+g configure.wrf | sed s+"mpicc"+"${WHERE_MPI}/mpicc"+g > yeah ; mv -f yeah configure.wrf
427                         sed s+"mpicc"+"mpicc -DMPI2_SUPPORT"+g configure.wrf > yeah ; mv -f yeah configure.wrf
428                         ## !!! NETCDF must be defined
429                         sed s+"-L../mars_lmd/libo -llmd"+"-L../mars_lmd/libo -llmd $NETCDF/lib/libnetcdf.a"+g configure.wrf > yeah
430                         mv -f yeah configure.wrf
431                         #### POUR LE TRAITEMENT PARTICULIERS des NESTS sur iDATAPLEX [cf. module_lmd_driver]
432                         sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -DSPECIAL_NEST_SAVE "+g configure.wrf > yeah
433                         mv -f yeah configure.wrf ;;
434                     # MPICH, 64 bits, no nesting / nesting
435     mpi_64)           cd arch ; ln -sf ../configure.defaults.fix64nest configure.defaults ; cd ..
436                       echo 3 | configure > log_compile 2> log_error
437                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf
438                       ### the following line is necessary because readtesassim has a line "use netcdf" in it!
439                       sed s+"-L../mars_lmd/libo -llmd"+"-L../mars_lmd/libo -llmd $NETCDF/lib/libnetcdf.a"+g configure.wrf > yeah ; mv -f yeah configure.wrf
440                       sed s+"mpif90"+"${WHERE_MPI}/mpif90"+g configure.wrf | sed s+"mpicc"+"${WHERE_MPI}/mpicc"+g | sed s+"mpicc"+"mpicc -DMPI2_SUPPORT"+g > yeah
441                                #| sed s+"fastsse"+"fast"+g > yeah
442                       mv -f yeah configure.wrf ;;
443                       #sed s+"-fastsse"+"-O2 -Munroll -Mcache_align"+g configure.wrf > yeah
444                       ##sed s+"-fastsse"+"-O2 -fpic"+g configure.wrf > yeah ## marche pas, ILM problem
445                       ##sed s+"-fastsse"+"-mcmodel=medium -Mlarge_arrays"+g configure.wrf > yeah ## marche pas, ILM problem
446                       #mv -f yeah configure.wrf ;;
447                     # MPICH, 64 bits, OK with periodic BC but no positive definite
448     mpi_64_test)      cd arch ; ln -sf ../configure.defaults.fix64nest configure.defaults ; cd ..
449                       echo 2 | configure > log_compile 2> log_error
450                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf
451                       sed s+"mpif90"+"${WHERE_MPI}/mpif90"+g configure.wrf | sed s+"mpicc"+"${WHERE_MPI}/mpicc"+g | sed s+"mpicc"+"mpicc -DMPI2_SUPPORT"+g > yeah
452                       mv -f yeah configure.wrf ;;
453                     # XLF+MPICH on AIX machine (64 bits) with nesting, NB: the 32bits notice is not to be considered
454     mpixlf_32)        cd arch ; ln -sf ../configure.defaults.fix64nest configure.defaults ; cd ..
455                       echo 3 | configure > log_compile 2> log_error
456                       sed -f mars.sed configure.wrf > yeah
457                       mv -f yeah configure.wrf ;;
458                     # ANYTHING ELSE
459     *)                echo NO PRESETS ...
460                       if [ ${donotallow} -eq 0 ] 
461                       then
462                         configure
463                       else
464                         # problem when an input file is used
465                         echo 'please cd to '$PWD' and type ./configure' 
466                         exit   
467                       fi ;;
468  esac
469  ########################
470
471
472  ### here a case structure would be great
473
474  if [[ "${phys}" == "newphys_" ]]
475  then
476     if [[ "${config}" == "les" ]]  ### LES is different because of WRFV3
477     then
478       sed s+"ARCH_LOCAL      =       "+"ARCH_LOCAL      =       -DNEWPHYS "+g configure.wrf > yeah
479     else
480       sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -DNEWPHYS "+g configure.wrf > yeah
481     fi
482     mv -f yeah configure.wrf
483  fi
484
485        if [[ ! ("${scenario}" == "") ]]   ### not supported with LES for the moment
486        then
487          sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -D${scenario} "+g configure.wrf > yeah
488          mv -f yeah configure.wrf
489        fi
490
491  ################
492  if [[ "${phys}" == "nophys_" ]]
493  then
494     if [[ "${config}" == "les" ]]  ### LES is different because of WRFV3
495     then
496       sed s+"ARCH_LOCAL      =       "+"ARCH_LOCAL      =       -DNOPHYS "+g configure.wrf > yeah ; mv -f yeah configure.wrf
497       sed s+"-L../mars_lmd/libo -llmd"+""+g configure.wrf > yeah ; mv -f yeah configure.wrf
498     else
499       ### not tested yet but should be working 
500       echo CAUTION CAUTION CAUTION NOT FULLY TESTED
501       sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -DNOPHYS "+g configure.wrf > yeah ; mv -f yeah configure.wrf
502       sed s+"-L../mars_lmd/libo -llmd"+""+g configure.wrf > yeah ; mv -f yeah configure.wrf
503     fi
504  fi
505  ################
506
507  if [ ${debug} -ne 0 ]   # not working for xlf!
508  then
509    echo 'DEBUG DEBUG DEBUG DEBUG'
510    sed s+"#-g"+"-g"+g configure.wrf > yeah
511    mv -f yeah configure.wrf
512  fi
513
514
515##################################################
516# compile physics
517##################################################
518if [ ${donotcompilephys} -eq 0 ]
519then
520
521  cd mars_lmd/
522
523  # required size
524  #----------------
525  case ${numproc} in
526    1) physx=$(expr ${lon} - 1)
527       physy=$(expr ${lat} - 1)
528       physz=$(expr ${level} - 1) ;;
529    2) physx=$(expr ${lon} - 1)
530       physy=$(expr ${lat} - 1) ; physy=$(expr ${physy} \/ 2)
531       physz=$(expr ${level} - 1) ;;
532    4) physx=$(expr ${lon} - 1) ; physx=$(expr ${physx} \/ 2)
533       physy=$(expr ${lat} - 1) ; physy=$(expr ${physy} \/ 2)
534       physz=$(expr ${level} - 1) ;;
535    6) physx=$(expr ${lon} - 1) ; physx=$(expr ${physx} \/ 2)
536       physy=$(expr ${lat} - 1) ; physy=$(expr ${physy} \/ 3)
537       physz=$(expr ${level} - 1) ;;
538    8) physx=$(expr ${lon} - 1) ; physx=$(expr ${physx} \/ 2)
539       physy=$(expr ${lat} - 1) ; physy=$(expr ${physy} \/ 4)
540       physz=$(expr ${level} - 1) ;;
541    12) physx=$(expr ${lon} - 1) ; physx=$(expr ${physx} \/ 3)
542        physy=$(expr ${lat} - 1) ; physy=$(expr ${physy} \/ 4)
543        physz=$(expr ${level} - 1) ;;
544    16) physx=$(expr ${lon} - 1) ; physx=$(expr ${physx} \/ 4)
545        physy=$(expr ${lat} - 1) ; physy=$(expr ${physy} \/ 4)
546        physz=$(expr ${level} - 1) ;;
547    20) physx=$(expr ${lon} - 1) ; physx=$(expr ${physx} \/ 4)
548        physy=$(expr ${lat} - 1) ; physy=$(expr ${physy} \/ 5)
549        physz=$(expr ${level} - 1) ;;
550    24) physx=$(expr ${lon} - 1) ; physx=$(expr ${physx} \/ 4)
551        physy=$(expr ${lat} - 1) ; physy=$(expr ${physy} \/ 6)
552        physz=$(expr ${level} - 1) ;;
553    32) physx=$(expr ${lon} - 1) ; physx=$(expr ${physx} \/ 4)
554        physy=$(expr ${lat} - 1) ; physy=$(expr ${physy} \/ 8)
555        physz=$(expr ${level} - 1) ;;
556    64) physx=$(expr ${lon} - 1) ; physx=$(expr ${physx} \/ 8)
557        physy=$(expr ${lat} - 1) ; physy=$(expr ${physy} \/ 8)
558        physz=$(expr ${level} - 1) ;;
559    128) physx=$(expr ${lon} - 1) ; physx=$(expr ${physx} \/ 8)
560        physy=$(expr ${lat} - 1) ; physy=$(expr ${physy} \/ 16)
561        physz=$(expr ${level} - 1) ;;
562    *) echo not supported ; exit
563  esac
564
565  # change this if you change num_soil_layers in WRF
566  # -- default is 10
567  if [[ "${phys}" == "newphys_" ]]
568  then
569     soilsize=18 ## nouvelle physique
570  else
571     soilsize=10
572  fi
573
574  # GCM environment variables
575  #--------------------------
576  export LMDGCM=$PWD
577  export LIBOGCM=$PWD/libo
578
579  # generate the appropriate dimphys
580  #---------------------------------
581  cd libf/phymars
582  \rm dimphys.h 2> /dev/null
583  if [[ "${phys}" == "newphys_" ]]
584  then
585    ln -sf meso_inc/meso_dimphys.h_ref .
586  fi
587  physize=$(expr ${physx} \* ${physy})
588  sed s/--xsize--/${physx}/g meso_dimphys.h_ref | sed s/--ysize--/${physy}/g | sed s/--physize--/${physize}/g | sed s/--zsize--/${physz}/g | sed s/--soilsize--/${soilsize}/g > dimphys.h
589  head -15 dimphys.h
590     ### TEST new new phys
591     if [[ "${phys}" == "newphys_" ]]
592     then
593       touch gr_fi_dyn.F.lien
594         ln -sf ../dyn3d/gr_fi_dyn.F .  ## dommage, a corriger
595     ###############################
596\rm scatterers.h
597cat << EOF > scatterers.h
598!-----------------------------------------------------------------------
599!   INCLUDE 'scatterers.h'
600!
601! Number of kind of tracer radiative properties
602! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
603! (ex: naerkind=1 if you use one dust mode without ice ...)
604! (ex: naerkind=2 if you use one dust mode and active ice ...)
605!-----------------------------------------------------------------------
606
607      integer, parameter :: naerkind=${scat}
608
609!-----------------------------------------------------------------------
610EOF
611     ###############################
612     ###############################
613     fi
614     ###
615     ###
616  cd ../..
617
618  # prepare for nesting
619  #---------------------
620  cd libf
621  duplicate${dom} 2> /dev/null
622  cd ..
623
624  # compile physics
625  #--------------------------
626  \rm libf/grid/dimensions.h 2> /dev/null
627  \rm -rf libo/* 2> /dev/null
628  echo 1. compiling LMD physics ...
629  echo compilation info in:
630  echo $PWD/libo/log_compile_phys
631
632  if [ ${debug} -ne 0 ]
633  then
634    echo 'DEBUG DEBUG DEBUG DEBUG'
635    nohup makegcm_${compilo} -debug -t ${tra} -p mars -d ${physz} testphys1d | tee libo/log_compile_phys | grep 'warnings' >> libo/log_compile_phys
636  else
637    nohup makegcm_${compilo} -t ${tra} -p mars -d ${physz} testphys1d | tee libo/log_compile_phys | grep 'warnings' >> libo/log_compile_phys
638  fi
639  echo ... done
640        # clean the duplicate routines
641        cd libf
642        duplicate1 2> /dev/null
643        cd ..
644
645  # merge LMD executables in one lib
646  #--------------------------------------
647  cd libo
648  mkdir temp
649  #cp -f LINUXfastI._${physz}_t${tra}_reg/*.a temp
650  cp -f LINUX*/*.a temp
651  cd temp
652  ar x libbibio.a
653  ar x libphymars.a
654  ar x libaeronomars.a
655  \rm *.a
656  ar r liblmd.a *
657  cp -f liblmd.a ..
658  cd ..
659  \rm -r temp
660  nm liblmd.a > liblmd_content
661  # finish merge
662  cd ..
663
664  # save a copy
665  #--------------
666  cp -f libo/liblmd.a libo/liblmd.a_${lon}_${lat}_${level}_${dom}_${tra}_${scat}
667  echo '****************************************'
668
669  # ok
670  #----
671  cd ..
672
673  # manage nest includes in module_lmd_driver.F
674  #----
675  cp call_meso_inifis$dom.inc call_meso_inifis.inc
676  cp call_meso_physiq$dom.inc call_meso_physiq.inc
677
678
679fi
680##################################################
681# END compile physics
682##################################################
683
684#------------------
685# compile WRF
686#------------------
687if [ ${justphys} -eq 0 ]
688then
689
690  echo 2. compiling WRF dynamical core ...
691
692  if [[ "${phys}" == "nophys_" ]]
693  then
694   echo 'NO LMD PHYSICS included'
695  else
696   if [[ ! ( -f "call_meso_physiq.inc" ) ]]
697   then
698    echo 'did you compile the physics ? no call_meso_physiq.inc !'
699    exit
700   fi
701  fi
702
703  # be sure to compile with the most recent physics
704  touch phys/module_lmd_driver.F
705
706  # talk to user
707  echo '>>> compiling ... this may be long ... <<<'
708  echo check progress in:
709  echo $PWD/log_compile
710  echo check possible errors in:
711  echo $PWD/log_error
712 
713  # compile ...
714  case ${config} in
715    '')         compile em_real > log_compile 2> log_error
716                    # save executables 
717                    cd main
718                      if [[ -f real.exe ]]
719                      then
720                        echo 'Looks good ! real.exe is here...'
721                      fi
722                      if [[ -f wrf.exe ]]
723                      then
724                        echo 'Looks good ! wrf.exe is here...'
725                      fi
726                    cp -f real.exe ../../real_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
727                    cp -f wrf.exe ../../wrf_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
728                    cd ..  ;;
729    'ideal')        #mkdir 'test/em_quarter_ss' 2> /dev/null
730                    echo '>>> YOUR CONFIG IS : '${config}
731                    compile em_quarter_ss > log_compile 2> log_error
732                    # save executables 
733                    cd main
734                      if [[ -f ideal.exe ]]
735                      then
736                        echo 'Looks good ! ideal.exe is here...'
737                      fi
738                      if [[ -f wrf.exe ]]
739                      then
740                        echo 'Looks good ! wrf.exe is here...'
741                      fi
742                    cp -f ideal.exe ../../ideal_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
743                    cp -f wrf.exe ../../wrf_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
744                    cd ..  ;;
745    'les')          echo '>>> YOUR CONFIG IS : '${config}
746                    mkdir 'test/em_les' 2> /dev/null                   
747                    compile em_les > log_compile 2> log_error
748                    # save executables 
749                    cd main
750                      if [[ -f ideal.exe ]]
751                      then
752                        echo 'Looks good ! ideal.exe is here...'
753                      fi
754                      if [[ -f wrf.exe ]]
755                      then
756                        echo 'Looks good ! wrf.exe is here...'
757                      fi
758                    cp -f ideal.exe ../../ideal_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
759                    cp -f wrf.exe ../../wrf_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
760                    cd ..  ;;
761    *)              echo not supported... please use ; echo ideal les ; exit ;;
762  esac
763  echo '*******last lines from log_error*********'
764  tail -n 20 log_error
765fi
766
767  # the end
768  echo '****************************************'
769  echo 'done.'
770  echo '****************************************'
771  cp last ../makemeso_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}
772  mv last ../../
773
774  # add here specific messages
775  if [[ "${dom}" != "1" ]]
776  then
777  nest=$(expr ${lon} + 4)
778  echo NB: in namelist.input, please set:
779  echo '
780  max_dom = '$dom'
781  s_we    = 1,1,
782  e_we    = '$lon','$nest',
783  s_sn    = 1,1,
784  e_sn    = '$lat','$nest',
785  s_vert  = 1,1,
786  e_vert  = '$level','$level','
787  fi
788
Note: See TracBrowser for help on using the repository browser.