source: trunk/MESOSCALE/LMD_MM_MARS/makemeso @ 802

Last change on this file since 802 was 790, checked in by acolaitis, 12 years ago

MESOSCALE. Fixed lifting for LES runs (put lifting after newsedim otherwise lifting is stupidly counteracted). Transferred LES def files to SIMU DEF. Added def files for high resolution monster LES. Fixed a small bug in makemeso for debug.

  • Property svn:executable set to *
File size: 34.5 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 2> /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 the whole place 
260      clean -a > /dev/null 2> /dev/null
261      ### get a possibly modified registry !
262      if [[ "${scenario}" == "" ]]
263      then
264        cp ../../SRC/WRFV2/Registry/Registry.EM Registry/
265      fi
266      if [[ "${config}" == "les" ]]
267      then
268        cp ../../SRC/LES/WRFV2/Registry/Registry.EM Registry/
269      fi
270      ### ensure the model will be recompiled from scratch with correct registry
271      cd Registry ; mv Registry Registry.bak ; Registry.bash ; cd ..
272#     answer='y' ## a voir... pas si sur
273#    else
274#            if [[ "${phys}" != "nophys_" ]]
275#            then
276#      echo Did you modify anything in the Registry or clean ? y for yes, any key for no ; read answer
277#      case ${answer} in
278#        y) cd Registry ; mv Registry Registry.bak ; Registry.bash ; cd .. ;;
279#        *) answer='no' ;;
280#      esac
281#            fi
282    fi
283  fi
284
285  # summary
286  echo '**********************'
287  echo '*** Your folder is ...'
288  echo '**********************'
289  echo ${conf_wrf}
290  echo '**********************'
291  echo '****************************************'
292  echo so ...
293  echo your computer is ${machine} bits
294  echo ${compilo} is your compiler
295       if [[ "${compilo}" = "mpi" ]]
296       then
297         echo MPICH is in ${WHERE_MPI}
298       fi
299  echo you will use ${numproc} processors
300  echo you have ${lon} x points
301  echo '         '${lat} y points
302  echo '         '${level} z points
303  echo '         '${dom} domains
304  echo '         '${tra} tracers
305  if [[ "${phys}" == "newphys_" ]]
306  then
307    echo '         '${scat} scatterers
308  fi
309  echo '****************************************'
310  # save answer
311  \rm last 2> /dev/null
312  touch last
313  echo ${reply} >> last
314     if [ "${compilo}" = "mpi" -o "${compilo}" = "mpifort" -o "${compilo}" = "mpixlf" ]
315     then
316     echo ${numproc} >> last
317     fi
318  echo ${lon} >> last
319  echo ${lat} >> last
320  echo ${level} >> last
321  echo ${dom} >> last
322  echo ${tra} >> last
323  echo ${scat} >> last
324  #echo ${answer} >> last
325
326#------------
327# log files
328#------------
329  \rm log_compile 2> /dev/null
330  \rm log_error 2> /dev/null
331
332#-----------------
333# configure WRF
334#-----------------
335  mv configure.wrf configure.wrf.bak 2> /dev/null
336  ########################
337  conf_wrf_forall="${compilo}_${machine}${single}${testflag}"
338
339         #### in this case options are different because for LES, WRFV3 is used
340         if [[ "${config}" == "les" ]]
341         then
342         conf_wrf_forall="${config}${compilo}_${machine}${single}${testflag}"
343         fi
344
345  case ${conf_wrf_forall} in
346
347     #######LES-specific (WRFV3-based) -- previously in 'makeles'
348     #######
349
350     lesmpi_64)        ## MPI (dm) 64 bits [PS: remplacer 3 par 4 pour openMP]
351                       \rm conf > /dev/null 2> /dev/null ; touch conf ; echo 3 >> conf ; echo 1 >> conf
352                       \rm configure.wrf > /dev/null 2> /dev/null ; ./configure < conf > /dev/null 2> /dev/null
353                       sed s+"-lnetcdf"+"-lnetcdf -L../mars_lmd/libo -llmd"+g   configure.wrf > yeah ; mv -f yeah configure.wrf
354                       if [[ "$(hostname)" == "ciclad1.ipsl.jussieu.fr" ]]
355                       then
356            echo "SPECIFIC CHANGES FOR CICLAD CLUSTER. EDIT makemeso IF YOU ENCOUNTER PROBLEMS."
357            #sed s+"mpif90 -f90=$(SFC)"+"/usr/lib64/openmpi/1.4.2-pgf/bin/mpif90"+g                      configure.wrf > yeah ; mv -f yeah configure.wrf
358            #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
359            sed s+"mpif90 -f90=\$(SFC)"+"/usr/lib64/openmpi/1.4.3-pgfgcc/bin/mpif90"+g                   configure.wrf > yeah ; mv -f yeah configure.wrf
360            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
361                       else
362            #sed s+"mpif90"+"$WHERE_MPI/mpif90"+g                 configure.wrf > yeah ; mv -f yeah configure.wrf
363            #sed s+"mpicc"+"$WHERE_MPI/mpicc -DMPI2_SUPPORT"+g    configure.wrf > yeah ; mv -f yeah configure.wrf
364            #### OPENMPI
365            sed s+"mpif90 -f90=\$(SFC)"+"$WHERE_MPI/mpif90"+g                 configure.wrf > yeah ; mv -f yeah configure.wrf
366            sed s+"mpicc -cc=\$(SCC)"+"$WHERE_MPI/mpicc -DMPI2_SUPPORT"+g    configure.wrf > yeah ; mv -f yeah configure.wrf
367                       fi
368                       sed s+"-fastsse"+" "+g                               configure.wrf > yeah ; mv -f yeah configure.wrf
369                          ### pas forcement necessaire ici mais OK
370                          sed s+"-llmd"+"-llmd $NETCDF/lib/libnetcdf.a"+g     configure.wrf > yeah ; mv -f yeah configure.wrf
371                       \rm conf > /dev/null ;;
372
373     lesmpifort_64)    ## MPI (dm) 64 bits IFORT
374                       \rm conf > /dev/null 2> /dev/null ; touch conf ; echo 7 >> conf ; echo 1 >> conf
375                       \rm configure.wrf > /dev/null 2> /dev/null ; ./configure < conf > /dev/null 2> /dev/null
376                       sed s+"-lnetcdf"+"-lnetcdf -L../mars_lmd/libo -llmd"+g   configure.wrf > yeah ; mv -f yeah configure.wrf
377                       sed s+"mpif90"+"$WHERE_MPI/mpif90"+g                 configure.wrf > yeah ; mv -f yeah configure.wrf
378                       sed s+"mpicc"+"$WHERE_MPI/mpicc -DMPI2_SUPPORT"+g    configure.wrf > yeah ; mv -f yeah configure.wrf
379                       sed s+"-fastsse"+" "+g                               configure.wrf > yeah ; mv -f yeah configure.wrf
380                       sed s+"O3"+"O3 -mcmodel=large -shared-intel"+g configure.wrf > yeah ; mv -f yeah configure.wrf
381                       sed s+"-llmd"+"-llmd $NETCDF/lib/libnetcdf.a"+g     configure.wrf > yeah ; mv -f yeah configure.wrf
382                       if [ ${debug} -ne 0 ]   # not working for xlf!
383                             then
384                             echo 'DEBUG DEBUG DEBUG DEBUG'
385                             sed s+"# -g"+" -g -no-ftz -traceback -ftrapuv -fp-stack-check -check"+g configure.wrf > yeah
386                             mv -f yeah configure.wrf
387                       fi
388                       \rm conf > /dev/null ;;
389
390     #######
391     #######LES-specific (WRFV3-based) -- previously in 'makeles'   
392
393#######TEST TEST
394                     # GFORTRAN, 64 bits, no nesting     
395     gnu_64_single)    cd arch ; ln -sf ../configure.defaults.gfortran64 configure.defaults ; cd ..
396                       echo 15 | configure > log_compile 2> log_error
397                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf 
398                       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 ;;
399#######TEST TEST
400                     # PGF90, 32 bits, no nesting
401     pgf_32_single)    echo 1 | configure > log_compile 2> log_error
402                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
403                     # PGF90, 32 bits, nesting
404     pgf_32_nest)      echo 2 | configure > log_compile 2> log_error
405                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
406                     # PGF90, 64 bits, no nesting
407     pgf_64_single)    echo 1 | configure > log_compile 2> log_error
408                       #### the following line is necessary because readtesassim has a line "use netcdf" in it!
409                       #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
410                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
411                     # PGF90, 64 bits, nesting
412     pgf_64_nest)      cd arch ; ln -sf ../configure.defaults.fix64nest configure.defaults ; cd ..
413                       echo 4 | configure > log_compile 2> log_error
414                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
415                     # G95, 32 bits, no nesting
416     g95_32_single)    echo 13 | configure > log_compile 2> log_error
417                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
418                     # G95, 64 bits, no nesting  ### we modify configure.defaults to add x86_64 next to g95 in the header comment
419     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 ..
420                       echo 14 | configure > log_compile 2> log_error
421                         ##### marche pas ....
422                         #sed s+"-fno-second-underscore"+""+g configure.wrf > yeah ; mv -f yeah configure.wrf
423                         #sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf
424                         #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 ;;
425                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
426                       #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;;
427                     # IFORT, 64 bits, no nesting
428     ifort_64_single)  echo 5 | configure > log_compile 2> log_error
429                       sed s+"-DIFORT_KLUDGE"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
430                       if [ ${debug} -ne 0 ]   # not working for xlf!
431                             then
432                             echo 'DEBUG DEBUG DEBUG DEBUG'
433                             sed s+"# -g"+" -g -no-ftz -traceback -ftrapuv -fp-stack-check -check"+g configure.wrf > yeah
434                             mv -f yeah configure.wrf
435                       fi
436                         ## !!! NETCDF must be defined
437                         sed s+"lio_grib_share"+"lio_grib_share -L../mars_lmd/libo -llmd $NETCDF/lib/libnetcdf.a"+g configure.wrf > yeah
438                         mv -f yeah configure.wrf ;;
439     mpifort_64)     # MPI+IFORT, 64 bits, no nesting / nesting
440                       echo 9 | configure > log_compile 2> log_error
441                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf
442                       sed s+"-f90=ifort"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
443                       sed s+"-cc=icc"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
444                       sed s+"-DIFORT_KLUDGE"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
445                       if [ ${debug} -ne 0 ]   # not working for xlf!
446                             then
447                             echo 'DEBUG DEBUG DEBUG DEBUG'
448                             sed s+"# -g"+" -g -no-ftz -traceback -ftrapuv -fp-stack-check -check"+g configure.wrf > yeah
449                             mv -f yeah configure.wrf
450                       fi
451                       sed s+"O3"+"O2"+g configure.wrf > yeah ; mv -f yeah configure.wrf
452                                        #sed s+"O3"+"O0"+g configure.wrf > yeah ; mv -f yeah configure.wrf  ### pour compilation rapide
453                                        #-w -ftz -align all -fno-alias -fp-model precise >>> options indiquees dans WRF3
454                                        #http://software.intel.com/en-us/articles/performance-tools-for-software-developers-building-wrf-with-the-intel-compilers/
455                            #### NB: RSL is replaced by RSL_LITE, better memory capacity, less seg fault
456                            sed s+"../external/RSL/RSL"+"../external/RSL_LITE"+g configure.wrf > yeah ; mv -f yeah configure.wrf
457                            sed s+"-DWRF_RSL_IO"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
458                            sed s+"-DRSL"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
459                            sed s+"librsl.a"+"librsl_lite.a"+g configure.wrf > yeah ; mv -f yeah configure.wrf
460                            sed s+"../external/RSL/gen"+"../external/RSL_LITE/gen"+g configure.wrf > yeah ; mv -f yeah configure.wrf
461                            sed s+"../external/RSL/module"+"../external/RSL_LITE/module"+g configure.wrf > yeah ; mv -f yeah configure.wrf
462                            sed s+"-lrsl"+"-lrsl_lite"+g configure.wrf > yeah ; mv -f yeah configure.wrf
463                            sed s+"linux"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
464                         ### necessary even if mpi-selector is used (no need in makegcm though)
465                         sed s+"mpif90"+"${WHERE_MPI}/mpif90"+g configure.wrf | sed s+"mpicc"+"${WHERE_MPI}/mpicc"+g > yeah ; mv -f yeah configure.wrf
466                         sed s+"mpicc"+"mpicc -DMPI2_SUPPORT"+g configure.wrf > yeah ; mv -f yeah configure.wrf
467                         ## !!! NETCDF must be defined
468                         sed s+"-L../mars_lmd/libo -llmd"+"-L../mars_lmd/libo -llmd $NETCDF/lib/libnetcdf.a"+g configure.wrf > yeah
469                         mv -f yeah configure.wrf
470                         #### POUR LE TRAITEMENT PARTICULIERS des NESTS sur iDATAPLEX [cf. module_lmd_driver]
471                         sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -DSPECIAL_NEST_SAVE "+g configure.wrf > yeah
472                         mv -f yeah configure.wrf ;;
473                     # MPICH, 64 bits, no nesting / nesting
474     mpi_64)           cd arch ; ln -sf ../configure.defaults.fix64nest configure.defaults ; cd ..
475                       echo 3 | configure > log_compile 2> log_error
476                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf
477                       ### the following line is necessary because readtesassim has a line "use netcdf" in it!
478                       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
479                       sed s+"mpif90"+"${WHERE_MPI}/mpif90"+g configure.wrf | sed s+"mpicc"+"${WHERE_MPI}/mpicc"+g | sed s+"mpicc"+"mpicc -DMPI2_SUPPORT"+g > yeah
480                       #sed s+"mpif90"+"${WHERE_MPI}/mpif90"+g configure.wrf | sed s+"mpicc"+"${WHERE_MPI}/mpicc"+g | sed s+"mpicc"+"mpicc -DMPI2_SUPPORT -w -O3"+g > yeah
481                                #| sed s+"fastsse"+"fast"+g > yeah
482                       mv -f yeah configure.wrf ;;
483                       #    #sed s+"-fastsse"+"-O2 -Munroll -Mcache_align"+g configure.wrf > yeah
484                       #    ##sed s+"-fastsse"+"-O2 -fpic"+g configure.wrf > yeah ## marche pas, ILM problem
485                       #    ##sed s+"-fastsse"+"-mcmodel=medium -Mlarge_arrays"+g configure.wrf > yeah ## marche pas, ILM problem
486                       #sed s+"-fastsse"+"-O3 -tp=nehalem-64 -fastsse -Mscalarsse -Mvect=sse -Mipa=fast"+g configure.wrf > yeah
487                       #sed s+"-fastsse"+"-O2 -Munroll -Mcache_align"+g configure.wrf > yeah
488                       #sed s+"-fastsse"+""+g configure.wrf > yeah
489                       #sed s+"-fastsse"+"-fast"+g configure.wrf > yeah
490                       #sed s+"-fastsse"+"-Mvect=noaltcode -Msmartalloc -Mprefetch=distance:8 -Mfprelaxed"+g configure.wrf > yeah
491                       #mv -f yeah configure.wrf ;;
492                     # MPICH, 64 bits, OK with periodic BC but no positive definite
493     mpi_64_test)      cd arch ; ln -sf ../configure.defaults.fix64nest configure.defaults ; cd ..
494                       echo 2 | configure > log_compile 2> log_error
495                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf
496                       sed s+"mpif90"+"${WHERE_MPI}/mpif90"+g configure.wrf | sed s+"mpicc"+"${WHERE_MPI}/mpicc"+g | sed s+"mpicc"+"mpicc -DMPI2_SUPPORT"+g > yeah
497                       mv -f yeah configure.wrf ;;
498                     # XLF+MPICH on AIX machine (64 bits) with nesting, NB: the 32bits notice is not to be considered
499     mpixlf_32)        cd arch ; ln -sf ../configure.defaults.fix64nest configure.defaults ; cd ..
500                       echo 3 | configure > log_compile 2> log_error
501                       sed -f mars.sed configure.wrf > yeah
502                       mv -f yeah configure.wrf ;;
503                     # ANYTHING ELSE
504     *)                echo NO PRESETS ...
505                       if [ ${donotallow} -eq 0 ] 
506                       then
507                         configure
508                       else
509                         # problem when an input file is used
510                         echo 'please cd to '$PWD' and type ./configure' 
511                         exit   
512                       fi ;;
513  esac
514  ########################
515
516
517  ### here a case structure would be great
518
519  if [[ "${phys}" == "newphys_" ]]
520  then
521     if [[ "${config}" == "les" ]]  ### LES is different because of WRFV3
522     then
523       sed s+"ARCH_LOCAL      =       "+"ARCH_LOCAL      =       -DNEWPHYS "+g configure.wrf > yeah
524     else
525       sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -DNEWPHYS "+g configure.wrf > yeah
526     fi
527     mv -f yeah configure.wrf
528  fi
529
530        if [[ ! ("${scenario}" == "") ]]   ### not supported with LES for the moment
531        then
532          sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -D${scenario} "+g configure.wrf > yeah
533          mv -f yeah configure.wrf
534        fi
535
536  ################
537  if [[ "${phys}" == "nophys_" ]]
538  then
539     if [[ "${config}" == "les" ]]  ### LES is different because of WRFV3
540     then
541       sed s+"ARCH_LOCAL      =       "+"ARCH_LOCAL      =       -DNOPHYS "+g configure.wrf > yeah ; mv -f yeah configure.wrf
542       sed s+"-L../mars_lmd/libo -llmd"+""+g configure.wrf > yeah ; mv -f yeah configure.wrf
543     else
544       ### not tested yet but should be working 
545       echo CAUTION CAUTION CAUTION NOT FULLY TESTED
546       sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -DNOPHYS "+g configure.wrf > yeah ; mv -f yeah configure.wrf
547       sed s+"-L../mars_lmd/libo -llmd"+""+g configure.wrf > yeah ; mv -f yeah configure.wrf
548     fi
549  fi
550  ################
551
552  if [ ${debug} -ne 0 ]   # not working for xlf!
553  then
554    echo 'DEBUG DEBUG DEBUG DEBUG'
555    sed s+"# -g"+" -g -no-ftz -traceback -ftrapuv -fp-stack-check -check"+g configure.wrf > yeah
556    #sed s+"# -g"+"-g -Ktrap=fp -Mbounds"+g configure.wrf > yeah
557    #sed s+"# -g"+"-g"+g configure.wrf > yeah
558    mv -f yeah configure.wrf
559  fi
560
561
562##################################################
563# compile physics
564##################################################
565if [ ${donotcompilephys} -eq 0 ]
566then
567
568  cd mars_lmd/
569
570  # required size
571  #----------------
572  case ${numproc} in
573      1) divx=1 ; divy=1  ;;
574      2) divx=1 ; divy=2  ;;
575      4) divx=2 ; divy=2  ;;
576      6) divx=2 ; divy=3  ;;
577      8) divx=2 ; divy=4  ;;
578     12) divx=3 ; divy=4  ;;
579     16) divx=4 ; divy=4  ;;
580     20) divx=4 ; divy=5  ;;
581     24) divx=4 ; divy=6  ;;
582     32) divx=4 ; divy=8  ;;
583     64) divx=8 ; divy=8  ;;
584    128) divx=8 ; divy=16 ;;
585      *) echo not yet supported ; exit ;;
586  esac
587  physx=$(expr ${lon} - 1)
588  restex=$(expr ${physx} \% ${divx})   
589  physy=$(expr ${lat} - 1)
590  restey=$(expr ${physy} \% ${divy})
591  if [[ ${restex} != 0 || ${restey} != 0 ]]
592  then
593     echo nx-1 shall be divided by ${divx}
594     echo ny-1 shall be divided by ${divy}
595     exit
596  fi
597  physx=$(expr ${physx} \/ ${divx})
598  physy=$(expr ${physy} \/ ${divy})
599  physz=$(expr ${level} - 1)
600
601  # change this if you change num_soil_layers in WRF
602  # -- default is 10
603  if [[ "${phys}" == "newphys_" ]]
604  then
605     soilsize=18 ## nouvelle physique
606  else
607     soilsize=10
608  fi
609
610  # GCM environment variables
611  #--------------------------
612  export LMDGCM=$PWD
613  export LIBOGCM=$PWD/libo
614
615  # generate the appropriate dimphys
616  #---------------------------------
617  cd libf/phymars
618  \rm dimphys.h 2> /dev/null
619  if [[ "${phys}" == "newphys_" ]]
620  then
621    ln -sf meso_inc/meso_dimphys.h_ref .
622  fi
623  physize=$(expr ${physx} \* ${physy})
624  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
625  head -15 dimphys.h
626     ### TEST new new phys
627     if [[ "${phys}" == "newphys_" ]]
628     then
629       touch gr_fi_dyn.F.lien
630         ln -sf ../dyn3d/gr_fi_dyn.F .  ## dommage, a corriger
631     ###############################
632\rm scatterers.h
633cat << EOF > scatterers.h
634!-----------------------------------------------------------------------
635!   INCLUDE 'scatterers.h'
636!
637! Number of kind of tracer radiative properties
638! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
639! (ex: naerkind=1 if you use one dust mode without ice ...)
640! (ex: naerkind=2 if you use one dust mode and active ice ...)
641!-----------------------------------------------------------------------
642
643      integer, parameter :: naerkind=${scat}
644
645!-----------------------------------------------------------------------
646EOF
647     ###############################
648     ###############################
649     fi
650     ###
651     ###
652  cd ../..
653
654  # prepare for nesting
655  #---------------------
656  cd libf
657  duplicate${dom} 2> /dev/null
658  cd ..
659
660  # compile physics
661  #--------------------------
662  \rm libf/grid/dimensions.h 2> /dev/null
663  \rm -rf libo/* 2> /dev/null
664  echo 1. compiling LMD physics ...
665  echo compilation info in:
666  echo $PWD/libo/log_compile_phys
667
668  if [ ${debug} -ne 0 ]
669  then
670    echo 'DEBUG DEBUG DEBUG DEBUG'
671    nohup makegcm_${compilo} -debug -t ${tra} -p mars -d ${physz} testphys1d | tee libo/log_compile_phys | grep 'warnings' >> libo/log_compile_phys
672  else
673    nohup makegcm_${compilo} -t ${tra} -p mars -d ${physz} testphys1d | tee libo/log_compile_phys | grep 'warnings' >> libo/log_compile_phys
674  fi
675  echo ... done
676        # clean the duplicate routines
677        cd libf
678        duplicate1 2> /dev/null
679        cd ..
680
681  # merge LMD executables in one lib
682  #--------------------------------------
683  cd libo
684  mkdir temp
685  #cp -f LINUXfastI._${physz}_t${tra}_reg/*.a temp
686  cp -f LINUX*/*.a temp
687  cd temp
688  ar x libbibio.a
689  ar x libphymars.a
690  ar x libaeronomars.a
691  \rm *.a
692  ar r liblmd.a *
693  cp -f liblmd.a ..
694  cd ..
695  \rm -r temp
696  nm liblmd.a > liblmd_content
697  # finish merge
698  cd ..
699
700  # save a copy
701  #--------------
702  cp -f libo/liblmd.a libo/liblmd.a_${lon}_${lat}_${level}_${dom}_${tra}_${scat}
703  echo '****************************************'
704
705  # ok
706  #----
707  cd ..
708
709  # manage nest includes in module_lmd_driver.F
710  #----
711  cp call_meso_inifis$dom.inc call_meso_inifis.inc
712  cp call_meso_physiq$dom.inc call_meso_physiq.inc
713
714
715fi
716##################################################
717# END compile physics
718##################################################
719
720#------------------
721# compile WRF
722#------------------
723if [ ${justphys} -eq 0 ]
724then
725
726  echo 2. compiling WRF dynamical core ...
727
728  if [[ "${phys}" == "nophys_" ]]
729  then
730   echo 'NO LMD PHYSICS included'
731  else
732   if [[ ! ( -f "call_meso_physiq.inc" ) ]]
733   then
734    echo 'did you compile the physics ? no call_meso_physiq.inc !'
735    exit
736   fi
737  fi
738
739  # be sure to compile with the most recent physics
740  touch phys/module_lmd_driver.F
741
742  # talk to user
743  echo '>>> compiling ... this may be long ... <<<'
744  echo check progress in:
745  echo $PWD/log_compile
746  echo check possible errors in:
747  echo $PWD/log_error
748 
749  # compile ...
750  case ${config} in
751    '')         ./compile em_real > log_compile 2> log_error
752                    # save executables 
753                    cd main
754                      if [[ -f real.exe ]]
755                      then
756                        echo 'Looks good ! real.exe is here...'
757                      fi
758                      if [[ -f wrf.exe ]]
759                      then
760                        echo 'Looks good ! wrf.exe is here...'
761                      fi
762                    cp -f real.exe ../../real_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
763                    cp -f wrf.exe ../../wrf_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
764                    cd ..  ;;
765    'ideal')        #mkdir 'test/em_quarter_ss' 2> /dev/null
766                    echo '>>> YOUR CONFIG IS : '${config}
767                    ./compile em_quarter_ss > log_compile 2> log_error
768                    # save executables 
769                    cd main
770                      if [[ -f ideal.exe ]]
771                      then
772                        echo 'Looks good ! ideal.exe is here...'
773                      fi
774                      if [[ -f wrf.exe ]]
775                      then
776                        echo 'Looks good ! wrf.exe is here...'
777                      fi
778                    cp -f ideal.exe ../../ideal_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
779                    cp -f wrf.exe ../../wrf_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
780                    cd ..  ;;
781    'les')          echo '>>> YOUR CONFIG IS : '${config}
782                    mkdir 'test/em_les' 2> /dev/null                   
783                    ./compile em_les > log_compile 2> log_error
784                    # save executables 
785                    cd main
786                      if [[ -f ideal.exe ]]
787                      then
788                        echo 'Looks good ! ideal.exe is here...'
789                      fi
790                      if [[ -f wrf.exe ]]
791                      then
792                        echo 'Looks good ! wrf.exe is here...'
793                      fi
794                    cp -f ideal.exe ../../ideal_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
795                    cp -f wrf.exe ../../wrf_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
796                    cd ..  ;;
797    *)              echo not supported... please use ; echo ideal les ; exit ;;
798  esac
799  echo '*******last lines from log_error*********'
800  tail -n 20 log_error
801fi
802
803  # the end
804  echo '****************************************'
805  echo 'done.'
806  echo '****************************************'
807  cp last ../makemeso_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}
808  mv last ../../
809  svn info ../../ > ../makemeso_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.svn.info
810
811  # add here specific messages
812  if [[ "${dom}" != "1" ]]
813  then
814  nest=$(expr ${lon} + 4)
815  echo NB: in namelist.input, please set:
816  echo '
817  max_dom = '$dom'
818  s_we    = 1,1,
819  e_we    = '$lon','$nest',
820  s_sn    = 1,1,
821  e_sn    = '$lat','$nest',
822  s_vert  = 1,1,
823  e_vert  = '$level','$level','
824  fi
825
Note: See TracBrowser for help on using the repository browser.