source: trunk/MESOSCALE/LMD_MM_MARS/makemeso @ 157

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

MESOSCALE: voir precedent commit. modifications apportees a makemeso pour eviter de poser des questions inutiles, dans la mesure ou le cas NOPHYS ne requiert pas de recompiler si on change la dimension, le nombre de procs, de traceurs... etc (FORTRAN 90, allocation dynamique). le nombre de procs et de domaines est tout de meme demande pour determiner l'option de compilation de WRF.

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