source: trunk/MESOSCALE/LMD_MM_MARS/makemeso @ 346

Last change on this file since 346 was 341, checked in by aslmd, 13 years ago

MESOSCALE: tests pour faire marcher le modele en parallele sur la ferme. toujours infructueux... toutes les notes incluses et options explorees en commentaire. les options par defaut restent les memes en attendant. ajout de scripts pour compiler NETCDF et MPI. correction d un probleme de Registry et de makemeso pour les runs LES ancienne physique. ajout d un cas test LES phoenix.

  • Property svn:executable set to *
File size: 32.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            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                       fi
365                       sed s+"-fastsse"+" "+g                               configure.wrf > yeah ; mv -f yeah configure.wrf
366                          ### pas forcement necessaire ici mais OK
367                          sed s+"-llmd"+"-llmd $NETCDF/lib/libnetcdf.a"+g     configure.wrf > yeah ; mv -f yeah configure.wrf
368                       \rm conf > /dev/null ;;
369
370     lesmpifort_64)    ## MPI (dm) 64 bits IFORT
371                       \rm conf > /dev/null 2> /dev/null ; touch conf ; echo 7 >> conf ; echo 1 >> conf
372                       \rm configure.wrf > /dev/null 2> /dev/null ; ./configure < conf > /dev/null 2> /dev/null
373                       sed s+"-lnetcdf"+"-lnetcdf -L../mars_lmd/libo -llmd"+g   configure.wrf > yeah ; mv -f yeah configure.wrf
374                       sed s+"mpif90"+"$WHERE_MPI/mpif90"+g                 configure.wrf > yeah ; mv -f yeah configure.wrf
375                       sed s+"mpicc"+"$WHERE_MPI/mpicc -DMPI2_SUPPORT"+g    configure.wrf > yeah ; mv -f yeah configure.wrf
376                       sed s+"-fastsse"+" "+g                               configure.wrf > yeah ; mv -f yeah configure.wrf
377                       sed s+"-llmd"+"-llmd $NETCDF/lib/libnetcdf.a"+g     configure.wrf > yeah ; mv -f yeah configure.wrf
378                       \rm conf > /dev/null ;;
379
380     #######
381     #######LES-specific (WRFV3-based) -- previously in 'makeles'   
382
383#######TEST TEST
384                     # GFORTRAN, 64 bits, no nesting     
385     gnu_64_single)    cd arch ; ln -sf ../configure.defaults.gfortran64 configure.defaults ; cd ..
386                       echo 15 | configure > log_compile 2> log_error
387                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf 
388                       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 ;;
389#######TEST TEST
390                     # PGF90, 32 bits, no nesting
391     pgf_32_single)    echo 1 | configure > log_compile 2> log_error
392                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
393                     # PGF90, 32 bits, nesting
394     pgf_32_nest)      echo 2 | configure > log_compile 2> log_error
395                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
396                     # PGF90, 64 bits, no nesting
397     pgf_64_single)    echo 1 | configure > log_compile 2> log_error
398                       #### the following line is necessary because readtesassim has a line "use netcdf" in it!
399                       #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
400                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
401                     # PGF90, 64 bits, nesting
402     pgf_64_nest)      cd arch ; ln -sf ../configure.defaults.fix64nest configure.defaults ; cd ..
403                       echo 4 | configure > log_compile 2> log_error
404                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
405                     # G95, 32 bits, no nesting
406     g95_32_single)    echo 13 | configure > log_compile 2> log_error
407                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
408                     # G95, 64 bits, no nesting  ### we modify configure.defaults to add x86_64 next to g95 in the header comment
409     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 ..
410                       echo 14 | configure > log_compile 2> log_error
411                         ##### marche pas ....
412                         #sed s+"-fno-second-underscore"+""+g configure.wrf > yeah ; mv -f yeah configure.wrf
413                         #sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf
414                         #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 ;;
415                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf ;;
416                       #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;;
417                     # IFORT, 64 bits, no nesting
418     ifort_64_single)  echo 5 | configure > log_compile 2> log_error
419                       sed s+"-DIFORT_KLUDGE"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
420                         ## !!! NETCDF must be defined
421                         sed s+"lio_grib_share"+"lio_grib_share -L../mars_lmd/libo -llmd $NETCDF/lib/libnetcdf.a"+g configure.wrf > yeah
422                         mv -f yeah configure.wrf ;;
423     mpifort_64)     # MPI+IFORT, 64 bits, no nesting / nesting
424                       echo 9 | configure > log_compile 2> log_error
425                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf
426                       sed s+"-f90=ifort"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
427                       sed s+"-cc=icc"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
428                       sed s+"-DIFORT_KLUDGE"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
429                       sed s+"O3"+"O2"+g configure.wrf > yeah ; mv -f yeah configure.wrf
430                                        #sed s+"O3"+"O0"+g configure.wrf > yeah ; mv -f yeah configure.wrf  ### pour compilation rapide
431                                        #-w -ftz -align all -fno-alias -fp-model precise >>> options indiquees dans WRF3
432                                        #http://software.intel.com/en-us/articles/performance-tools-for-software-developers-building-wrf-with-the-intel-compilers/
433                            #### NB: RSL is replaced by RSL_LITE, better memory capacity, less seg fault
434                            sed s+"../external/RSL/RSL"+"../external/RSL_LITE"+g configure.wrf > yeah ; mv -f yeah configure.wrf
435                            sed s+"-DWRF_RSL_IO"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
436                            sed s+"-DRSL"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
437                            sed s+"librsl.a"+"librsl_lite.a"+g configure.wrf > yeah ; mv -f yeah configure.wrf
438                            sed s+"../external/RSL/gen"+"../external/RSL_LITE/gen"+g configure.wrf > yeah ; mv -f yeah configure.wrf
439                            sed s+"../external/RSL/module"+"../external/RSL_LITE/module"+g configure.wrf > yeah ; mv -f yeah configure.wrf
440                            sed s+"-lrsl"+"-lrsl_lite"+g configure.wrf > yeah ; mv -f yeah configure.wrf
441                            sed s+"linux"+" "+g configure.wrf > yeah ; mv -f yeah configure.wrf
442                         ### necessary even if mpi-selector is used (no need in makegcm though)
443                         sed s+"mpif90"+"${WHERE_MPI}/mpif90"+g configure.wrf | sed s+"mpicc"+"${WHERE_MPI}/mpicc"+g > yeah ; mv -f yeah configure.wrf
444                         sed s+"mpicc"+"mpicc -DMPI2_SUPPORT"+g configure.wrf > yeah ; mv -f yeah configure.wrf
445                         ## !!! NETCDF must be defined
446                         sed s+"-L../mars_lmd/libo -llmd"+"-L../mars_lmd/libo -llmd $NETCDF/lib/libnetcdf.a"+g configure.wrf > yeah
447                         mv -f yeah configure.wrf
448                         #### POUR LE TRAITEMENT PARTICULIERS des NESTS sur iDATAPLEX [cf. module_lmd_driver]
449                         sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -DSPECIAL_NEST_SAVE "+g configure.wrf > yeah
450                         mv -f yeah configure.wrf ;;
451                     # MPICH, 64 bits, no nesting / nesting
452     mpi_64)           cd arch ; ln -sf ../configure.defaults.fix64nest configure.defaults ; cd ..
453                       echo 3 | configure > log_compile 2> log_error
454                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf
455                       ### the following line is necessary because readtesassim has a line "use netcdf" in it!
456                       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
457                       sed s+"mpif90"+"${WHERE_MPI}/mpif90"+g configure.wrf | sed s+"mpicc"+"${WHERE_MPI}/mpicc"+g | sed s+"mpicc"+"mpicc -DMPI2_SUPPORT"+g > yeah
458                       #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
459                                #| sed s+"fastsse"+"fast"+g > yeah
460                       mv -f yeah configure.wrf ;;
461                       #    #sed s+"-fastsse"+"-O2 -Munroll -Mcache_align"+g configure.wrf > yeah
462                       #    ##sed s+"-fastsse"+"-O2 -fpic"+g configure.wrf > yeah ## marche pas, ILM problem
463                       #    ##sed s+"-fastsse"+"-mcmodel=medium -Mlarge_arrays"+g configure.wrf > yeah ## marche pas, ILM problem
464                       #sed s+"-fastsse"+"-O3 -tp=nehalem-64 -fastsse -Mscalarsse -Mvect=sse -Mipa=fast"+g configure.wrf > yeah
465                       #sed s+"-fastsse"+"-O2 -Munroll -Mcache_align"+g configure.wrf > yeah
466                       #sed s+"-fastsse"+""+g configure.wrf > yeah
467                       #sed s+"-fastsse"+"-fast"+g configure.wrf > yeah
468                       #sed s+"-fastsse"+"-Mvect=noaltcode -Msmartalloc -Mprefetch=distance:8 -Mfprelaxed"+g configure.wrf > yeah
469                       #mv -f yeah configure.wrf ;;
470                     # MPICH, 64 bits, OK with periodic BC but no positive definite
471     mpi_64_test)      cd arch ; ln -sf ../configure.defaults.fix64nest configure.defaults ; cd ..
472                       echo 2 | configure > log_compile 2> log_error
473                       sed -f mars.sed configure.wrf > yeah ; mv -f yeah configure.wrf
474                       sed s+"mpif90"+"${WHERE_MPI}/mpif90"+g configure.wrf | sed s+"mpicc"+"${WHERE_MPI}/mpicc"+g | sed s+"mpicc"+"mpicc -DMPI2_SUPPORT"+g > yeah
475                       mv -f yeah configure.wrf ;;
476                     # XLF+MPICH on AIX machine (64 bits) with nesting, NB: the 32bits notice is not to be considered
477     mpixlf_32)        cd arch ; ln -sf ../configure.defaults.fix64nest configure.defaults ; cd ..
478                       echo 3 | configure > log_compile 2> log_error
479                       sed -f mars.sed configure.wrf > yeah
480                       mv -f yeah configure.wrf ;;
481                     # ANYTHING ELSE
482     *)                echo NO PRESETS ...
483                       if [ ${donotallow} -eq 0 ] 
484                       then
485                         configure
486                       else
487                         # problem when an input file is used
488                         echo 'please cd to '$PWD' and type ./configure' 
489                         exit   
490                       fi ;;
491  esac
492  ########################
493
494
495  ### here a case structure would be great
496
497  if [[ "${phys}" == "newphys_" ]]
498  then
499     if [[ "${config}" == "les" ]]  ### LES is different because of WRFV3
500     then
501       sed s+"ARCH_LOCAL      =       "+"ARCH_LOCAL      =       -DNEWPHYS "+g configure.wrf > yeah
502     else
503       sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -DNEWPHYS "+g configure.wrf > yeah
504     fi
505     mv -f yeah configure.wrf
506  fi
507
508        if [[ ! ("${scenario}" == "") ]]   ### not supported with LES for the moment
509        then
510          sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -D${scenario} "+g configure.wrf > yeah
511          mv -f yeah configure.wrf
512        fi
513
514  ################
515  if [[ "${phys}" == "nophys_" ]]
516  then
517     if [[ "${config}" == "les" ]]  ### LES is different because of WRFV3
518     then
519       sed s+"ARCH_LOCAL      =       "+"ARCH_LOCAL      =       -DNOPHYS "+g configure.wrf > yeah ; mv -f yeah configure.wrf
520       sed s+"-L../mars_lmd/libo -llmd"+""+g configure.wrf > yeah ; mv -f yeah configure.wrf
521     else
522       ### not tested yet but should be working 
523       echo CAUTION CAUTION CAUTION NOT FULLY TESTED
524       sed s+"ARCHFLAGS       =       "+"ARCHFLAGS       =       -DNOPHYS "+g configure.wrf > yeah ; mv -f yeah configure.wrf
525       sed s+"-L../mars_lmd/libo -llmd"+""+g configure.wrf > yeah ; mv -f yeah configure.wrf
526     fi
527  fi
528  ################
529
530  if [ ${debug} -ne 0 ]   # not working for xlf!
531  then
532    echo 'DEBUG DEBUG DEBUG DEBUG'
533    sed s+"#-g"+"-g -Ktrap=fp -Mbounds"+g configure.wrf > yeah
534    #sed s+"#-g"+"-g"+g configure.wrf > yeah
535    mv -f yeah configure.wrf
536  fi
537
538
539##################################################
540# compile physics
541##################################################
542if [ ${donotcompilephys} -eq 0 ]
543then
544
545  cd mars_lmd/
546
547  # required size
548  #----------------
549  case ${numproc} in
550      1) divx=1 ; divy=1  ;;
551      2) divx=1 ; divy=2  ;;
552      4) divx=2 ; divy=2  ;;
553      6) divx=2 ; divy=3  ;;
554      8) divx=2 ; divy=4  ;;
555     12) divx=3 ; divy=4  ;;
556     16) divx=4 ; divy=4  ;;
557     20) divx=4 ; divy=5  ;;
558     24) divx=4 ; divy=6  ;;
559     32) divx=4 ; divy=8  ;;
560     64) divx=8 ; divy=8  ;;
561    128) divx=8 ; divy=16 ;;
562      *) echo not yet supported ; exit ;;
563  esac
564  physx=$(expr ${lon} - 1)
565  restex=$(expr ${physx} \% ${divx})   
566  physy=$(expr ${lat} - 1)
567  restey=$(expr ${physy} \% ${divy})
568  if [[ ${restex} != 0 || ${restey} != 0 ]]
569  then
570     echo nx-1 shall be divided by ${divx}
571     echo ny-1 shall be divided by ${divy}
572     exit
573  fi
574  physx=$(expr ${physx} \/ ${divx})
575  physy=$(expr ${physy} \/ ${divy})
576  physz=$(expr ${level} - 1)
577
578  # change this if you change num_soil_layers in WRF
579  # -- default is 10
580  if [[ "${phys}" == "newphys_" ]]
581  then
582     soilsize=18 ## nouvelle physique
583  else
584     soilsize=10
585  fi
586
587  # GCM environment variables
588  #--------------------------
589  export LMDGCM=$PWD
590  export LIBOGCM=$PWD/libo
591
592  # generate the appropriate dimphys
593  #---------------------------------
594  cd libf/phymars
595  \rm dimphys.h 2> /dev/null
596  if [[ "${phys}" == "newphys_" ]]
597  then
598    ln -sf meso_inc/meso_dimphys.h_ref .
599  fi
600  physize=$(expr ${physx} \* ${physy})
601  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
602  head -15 dimphys.h
603     ### TEST new new phys
604     if [[ "${phys}" == "newphys_" ]]
605     then
606       touch gr_fi_dyn.F.lien
607         ln -sf ../dyn3d/gr_fi_dyn.F .  ## dommage, a corriger
608     ###############################
609\rm scatterers.h
610cat << EOF > scatterers.h
611!-----------------------------------------------------------------------
612!   INCLUDE 'scatterers.h'
613!
614! Number of kind of tracer radiative properties
615! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
616! (ex: naerkind=1 if you use one dust mode without ice ...)
617! (ex: naerkind=2 if you use one dust mode and active ice ...)
618!-----------------------------------------------------------------------
619
620      integer, parameter :: naerkind=${scat}
621
622!-----------------------------------------------------------------------
623EOF
624     ###############################
625     ###############################
626     fi
627     ###
628     ###
629  cd ../..
630
631  # prepare for nesting
632  #---------------------
633  cd libf
634  duplicate${dom} 2> /dev/null
635  cd ..
636
637  # compile physics
638  #--------------------------
639  \rm libf/grid/dimensions.h 2> /dev/null
640  \rm -rf libo/* 2> /dev/null
641  echo 1. compiling LMD physics ...
642  echo compilation info in:
643  echo $PWD/libo/log_compile_phys
644
645  if [ ${debug} -ne 0 ]
646  then
647    echo 'DEBUG DEBUG DEBUG DEBUG'
648    nohup makegcm_${compilo} -debug -t ${tra} -p mars -d ${physz} testphys1d | tee libo/log_compile_phys | grep 'warnings' >> libo/log_compile_phys
649  else
650    nohup makegcm_${compilo} -t ${tra} -p mars -d ${physz} testphys1d | tee libo/log_compile_phys | grep 'warnings' >> libo/log_compile_phys
651  fi
652  echo ... done
653        # clean the duplicate routines
654        cd libf
655        duplicate1 2> /dev/null
656        cd ..
657
658  # merge LMD executables in one lib
659  #--------------------------------------
660  cd libo
661  mkdir temp
662  #cp -f LINUXfastI._${physz}_t${tra}_reg/*.a temp
663  cp -f LINUX*/*.a temp
664  cd temp
665  ar x libbibio.a
666  ar x libphymars.a
667  ar x libaeronomars.a
668  \rm *.a
669  ar r liblmd.a *
670  cp -f liblmd.a ..
671  cd ..
672  \rm -r temp
673  nm liblmd.a > liblmd_content
674  # finish merge
675  cd ..
676
677  # save a copy
678  #--------------
679  cp -f libo/liblmd.a libo/liblmd.a_${lon}_${lat}_${level}_${dom}_${tra}_${scat}
680  echo '****************************************'
681
682  # ok
683  #----
684  cd ..
685
686  # manage nest includes in module_lmd_driver.F
687  #----
688  cp call_meso_inifis$dom.inc call_meso_inifis.inc
689  cp call_meso_physiq$dom.inc call_meso_physiq.inc
690
691
692fi
693##################################################
694# END compile physics
695##################################################
696
697#------------------
698# compile WRF
699#------------------
700if [ ${justphys} -eq 0 ]
701then
702
703  echo 2. compiling WRF dynamical core ...
704
705  if [[ "${phys}" == "nophys_" ]]
706  then
707   echo 'NO LMD PHYSICS included'
708  else
709   if [[ ! ( -f "call_meso_physiq.inc" ) ]]
710   then
711    echo 'did you compile the physics ? no call_meso_physiq.inc !'
712    exit
713   fi
714  fi
715
716  # be sure to compile with the most recent physics
717  touch phys/module_lmd_driver.F
718
719  # talk to user
720  echo '>>> compiling ... this may be long ... <<<'
721  echo check progress in:
722  echo $PWD/log_compile
723  echo check possible errors in:
724  echo $PWD/log_error
725 
726  # compile ...
727  case ${config} in
728    '')         compile em_real > log_compile 2> log_error
729                    # save executables 
730                    cd main
731                      if [[ -f real.exe ]]
732                      then
733                        echo 'Looks good ! real.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 real.exe ../../real_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    'ideal')        #mkdir 'test/em_quarter_ss' 2> /dev/null
743                    echo '>>> YOUR CONFIG IS : '${config}
744                    compile em_quarter_ss > 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    'les')          echo '>>> YOUR CONFIG IS : '${config}
759                    mkdir 'test/em_les' 2> /dev/null                   
760                    compile em_les > log_compile 2> log_error
761                    # save executables 
762                    cd main
763                      if [[ -f ideal.exe ]]
764                      then
765                        echo 'Looks good ! ideal.exe is here...'
766                      fi
767                      if [[ -f wrf.exe ]]
768                      then
769                        echo 'Looks good ! wrf.exe is here...'
770                      fi
771                    cp -f ideal.exe ../../ideal_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
772                    cp -f wrf.exe ../../wrf_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}.exe
773                    cd ..  ;;
774    *)              echo not supported... please use ; echo ideal les ; exit ;;
775  esac
776  echo '*******last lines from log_error*********'
777  tail -n 20 log_error
778fi
779
780  # the end
781  echo '****************************************'
782  echo 'done.'
783  echo '****************************************'
784  cp last ../makemeso_x${lon}_y${lat}_z${level}_d${dom}_t${tra}_p${numproc}_s${scat}
785  mv last ../../
786
787  # add here specific messages
788  if [[ "${dom}" != "1" ]]
789  then
790  nest=$(expr ${lon} + 4)
791  echo NB: in namelist.input, please set:
792  echo '
793  max_dom = '$dom'
794  s_we    = 1,1,
795  e_we    = '$lon','$nest',
796  s_sn    = 1,1,
797  e_sn    = '$lat','$nest',
798  s_vert  = 1,1,
799  e_vert  = '$level','$level','
800  fi
801
Note: See TracBrowser for help on using the repository browser.