Commit fdb107ef authored by HOURDIN Christophe's avatar HOURDIN Christophe
Browse files

forced croco pisces config for Pierre Chabert's thesis (SOLAB ANR Project)...

forced croco pisces config  for Pierre Chabert's thesis  (SOLAB ANR Project) can11sen2_croco/exp/c11s2cp_climatoruns (08/2020)
parents
# $Id: Makefile 1483 2014-03-15 17:05:10Z rblod $
#
#======================================================================
# CROCO is a branch of ROMS developped at IRD and INRIA, in France
# The two other branches from UCLA (Shchepetkin et al)
# and Rutgers University (Arango et al) are under MIT/X style license.
# CROCO specific routines (nesting) are under CeCILL-C license.
#
# CROCO website : http://www.croco-ocean.org
#======================================================================
#
# Universal machine independent makefile for ROMS model
#
#======================================================================
# Set machine dependent definitions and rules.
#======================================================================
include Makedefs
#======================================================================
# Model Configuration:
#======================================================================
# SRCS: source codes files are sorted into groups, separated by
# blanc lines:
# 1) main driving part; 2) 2D time stepping engine;
# 3) 3D time stepping engine; 4) non-hydrostatic engine
# 5) sea-water EOS; 6) vertical mixing schemes;
# 7) on-fly model diagnostics; 8) netCDF I/O routines;
# 9) main forcing; 10) Wave forcing routines;
# 11) Online surface forcing; 12) Floats routines;
# 13) Station diagnostics; 14) biology/sediment routines;
# 15) PISCES biology; 16) MPI routines;
# 17) AGRIF routines; 18) OASIS coupling interface;
#
# SRC90: additional F90 routines for PISCES code and Non-hydrostatic
# analysis routines
#======================================================================
SRCS = main.F step.F read_inp.F\
timers_roms.F init_scalars.F init_arrays.F set_weights.F\
set_scoord.F ana_grid.F setup_grid1.F setup_grid2.F\
set_nudgcof.F ana_initial.F analytical.F zonavg.F\
\
step2d.F u2dbc.F v2dbc.F zetabc.F\
obc_volcons.F\
\
pre_step3d.F step3d_t.F step3d_uv1.F step3d_uv2.F\
prsgrd.F rhs3d.F set_depth.F omega.F\
uv3dmix.F uv3dmix_spg.F t3dmix.F t3dmix_spg.F\
hmix_coef.F wetdry.F\
u3dbc.F v3dbc.F t3dbc.F\
\
step3d_fast.F\
step3d_w.F rhs3d_w_nh.F initial_nbq.F grid_nbq.F\
unbq_bc.F vnbq_bc.F wnbq_bc.F rnbq_bc.F\
w3dbc.F nbq_bry_store.F\
\
rho_eos.F ab_ratio.F alfabeta.F\
\
ana_vmix.F bvf_mix.F lmd_vmix.F gls_mixing.F\
lmd_skpp.F lmd_bkpp.F lmd_swfrac.F lmd_wscale.F\
\
diag.F wvlcty.F checkdims.F grid_stiffness.F\
bio_diag.F setup_kwds.F check_kwds.F check_srcs.F\
check_switches1.F check_switches2.F\
debug.F\
\
param.F ncscrum.F scalars.F\
output.F put_global_atts.F\
nf_fread.F nf_fread_x.F nf_fread_y.F nf_read_bry.F\
get_date.F lenstr.F closecdf.F insert_node.F\
fillvalue.F nf_add_attribute.F set_cycle.F\
def_grid_2d.F def_grid_3d.F def_his.F def_rst.F\
def_diags.F def_diagsM.F def_bio_diags.F\
wrt_grid.F wrt_his.F wrt_avg.F wrt_rst.F\
wrt_diags.F wrt_diags_avg.F wrt_diagsM.F wrt_diagsM_avg.F\
wrt_bio_diags.F wrt_bio_diags_avg.F\
set_avg.F set_diags_avg.F set_diagsM_avg.F\
set_bio_diags_avg.F\
def_diags_vrt.F wrt_diags_vrt.F\
set_diags_vrt.F set_diags_vrt_avg.F wrt_diags_vrt_avg.F\
def_diags_ek.F wrt_diags_ek.F\
set_diags_ek.F set_diags_ek_avg.F wrt_diags_ek_avg.F\
def_diags_pv.F wrt_diags_pv.F\
set_diags_pv.F set_diags_pv_avg.F wrt_diags_pv_avg.F\
def_diags_eddy.F\
set_diags_eddy_avg.F wrt_diags_eddy_avg.F\
def_surf.F wrt_surf.F\
set_surf_avg.F wrt_surf_avg.F\
\
get_grid.F get_initial.F get_vbc.F get_wwave.F\
get_tclima.F get_uclima.F get_ssh.F get_sss.F\
get_smflux.F get_stflux.F get_srflux.F get_sst.F\
mod_tides_mas.F tidedata.F mas.F get_tides.F\
clm_tides.F get_bulk.F bulk_flux.F\
get_bry.F get_bry_bio.F sstskin.F\
get_psource.F get_psource_ts.F\
cfb_stress.F\
\
mrl_wci.F wkb_wwave.F wkbbc.F get_bry_wkb.F\
\
online_bulk_var.F online_get_bulk.F\
online_interp.F online_interpolate_bulk.F\
online_set_bulk.F\
\
init_floats.F wrt_floats.F step_floats.F rhs_floats.F\
interp_rho.F def_floats.F init_arrays_floats.F\
random_walk.F get_initial_floats.F\
\
init_sta.F wrt_sta.F step_sta.F interp_sta.F\
def_sta.F init_arrays_sta.F\
\
biology.F o2sato.F sediment.F bbl.F\
\
MPI_Setup.F MessPass2D.F MessPass3D.F exchange.F\
autotiling.F\
\
zoom.F update2D.F set_nudgcof_fine.F\
zoombc_2D.F zoombc_3D.F uv3dpremix.F\
t3dpremix.F update3D.F zoombc_3Dfast.F\
Agrif2Model.F\
\
send_xios_diags.F\
\
cpl_prism_define.F cpl_prism_put.F cpl_prism_init.F\
cpl_prism_get.F cpl_prism_getvar.F cpl_prism_grid.F\
SRCS90 = \
par_pisces.F90 ocean2pisces.F90 trc.F90 sms_pisces.F90\
p4zche.F90 p4zint.F90 p4zlys.F90 p4zflx.F90\
p4zlim.F90 p4zsink.F90 p4zmicro.F90 p4zmeso.F90\
p4zmort.F90 p4zopt.F90 p4zprod.F90 p4zrem.F90\
p4zsbc.F90 p4zsed.F90 trcwri_pisces.F90\
p4zagg.F90 p4zfechem.F90 p4zligand.F90 p4zpoc.F90\
p4zsms.F90 p5zlim.F90 p5zmeso.F90\
p5zmicro.F90 p5zmort.F90 p5zprod.F90\
p4zbio.F90 trcsms_pisces.F90 trcini_pisces.F90\
pisces_ini.F90 oce_sed.F90 par_sed.F90 sedadv.F90\
sedarr.F90 sedbtb.F90 sedchem.F90 sedco3.F90\
seddiff.F90 seddsr.F90 seddta.F90 sed.F90\
sedini.F90 sedinitrc.F90 sedinorg.F90 sedmat.F90\
sedmbc.F90 sedmodel.F90 sed_oce.F90 sedorg.F90\
sedrst.F90 sedsfc.F90 sedstp.F90 sedwri.F90\
setavg_sed.F90\
\
module_parameter_oa.F90\
module_oa_time.F90 module_oa_space.F90 module_oa_periode.F90\
module_oa_variables.F90 module_oa_type.F90 module_oa_stock.F90\
module_oa_level.F90 module_oa_interface.F90\
module_oa_upd.F90 croco_oa.F90 var_oa.F90\
\
tooldatosec.F90 toolsectodat.F90 tooldecompdat.F90
AMRDIR = AGRIF/AGRIF_YOURFILES
#======================================================================
TOOLS = mpc cross_matrix cppcheck srcscheck checkkwds partit ncjoin ncrename
RCS = $(SRCS:.F=.f)
RCS90 = $(SRCS90:.F90=.f90)
OBJS = $(RCS:.f=.o)
OBJS90 = $(RCS90:.f90=.o)
SBIN = croco
AMRRCS=$(AMRSRCS:.F=.f)
AMROBJS=$(AMRRCS:.f=.o)
%.mod : %.o
@touch $@
#
# Executable file.
# ========= =====
#
$(SBIN): $(OBJS90) $(OBJS)
$(LDR) $(FFLAGS) $(LDFLAGS) -o a.out $(OBJS90) $(OBJS) $(LCDF) $(LMPI)
mv a.out $(SBIN)
#
# Everything
# ==========
all: tools depend $(SBIN)
#
# Auxiliary utility programs and List of Dependecies:
# ========= ======= ======== === ==== == ============
#
tools: $(TOOLS)
mpc: mpc.F
$(CPP) -P $(CPPFLAGS) mpc.F > mpc_.f
$(LDR) $(FFLAGS) $(LDFLAGS) -o mpc mpc_.f
cross_matrix: mpc cross_matrix.F
$(CPP) -P $(CPPFLAGS) cross_matrix.F | ./mpc > cross_matrix_.f
$(CFT) -c $(FFLAGS) cross_matrix_.f -o cross_matrix.o
$(LDR) $(FFLAGS) $(LDFLAGS) -o cross_matrix cross_matrix.o
cppcheck: mpc cppcheck.F
$(CPP) -P $(CPPFLAGS) cppcheck.F | ./mpc > cppcheck_.f
$(CFT) -c $(FFLAGS) cppcheck_.f -o cppcheck.o
$(LDR) $(FFLAGS) $(LDFLAGS) -o cppcheck cppcheck.o
srcscheck: mpc srcscheck.F
$(CPP) -P $(CPPFLAGS) srcscheck.F | ./mpc > srcscheck_.f
$(CFT) -c $(FFLAGS) srcscheck_.f -o srcscheck.o
$(LDR) $(FFLAGS) $(LDFLAGS) -o srcscheck srcscheck.o
rm -f check_srcs.F
checkkwds: mpc checkkwds.F
$(CPP) -P $(CPPFLAGS) checkkwds.F | ./mpc > checkkwds_.f
$(CFT) -c $(FFLAGS) checkkwds_.f -o checkkwds.o
$(LDR) $(FFLAGS) $(LDFLAGS) -o checkkwds checkkwds.o
rm -f setup_kwds.F
checkdefs: check_switches1.F setup_kwds.F
check_switches1.F: cppcheck cppdefs.h
cat cppdefs.h cppdefs_dev.h > mergcpp.txt
./cppcheck
check_srcs.F: srcscheck Makefile
./srcscheck
setup_kwds.F: checkkwds read_inp.F
./checkkwds
partit: partit.o insert_node.o lenstr.o
$(LDR) $(FFLAGS) $(LDFLAGS) -o partit partit.o insert_node.o lenstr.o $(LCDF)
ncjoin: ncjoin.o lenstr.o
$(LDR) $(FFLAGS) $(LDFLAGS) -o ncjoin ncjoin.o lenstr.o $(LCDF)
ncrename: ncrename.o lenstr.o
$(LDR) $(FFLAGS) $(LDFLAGS) -o ncrename ncrename.o lenstr.o $(LCDF)
depend: checkdefs cross_matrix
./cross_matrix *.F90 *.F
mymodules: $(MOBJS) $(AMROBJS)
#
# Target to create tar file.
# ====== == ====== === =====
#
tarfile:
tar cvf croco.tar Make* *.h *.F *.F90 *.in *.in.*
#
# Cleaning:
# =========
#
rmtools:
/bin/rm -f $(TOOLS)
clean:
/bin/rm -rf core *.o $(AMRDIR)/*.o *.i *.s *.f *.f90 *.trace *.mod ${COMP_FILES}
clobber: clean
/bin/rm -rf $(SBIN) $(TOOLS) ./rii_files
plotter: plotter.F
f77 -n32 -o plotter plotter.F $(LIBNCAR)
#
# Special treatment for barrier function:
# THERE SHALL BE NO OPTIMIZATION HERE!!!!
#
my_barrier.o: my_barrier.f
$(CFT) -c -O0 my_barrier.f
#
# Include automatically generated dependency list:
#
-include Make.depend
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
! $Id: cross_matrix.F 1458 2014-02-03 15:01:25Z gcambon $
!
!======================================================================
! CROCO is a branch of ROMS developped at IRD and INRIA, in France
! The two other branches from UCLA (Shchepetkin et al)
! and Rutgers University (Arango et al) are under MIT/X style license.
! CROCO specific routines (nesting) are under CeCILL-C license.
!
! CROCO website : http://www.croco-ocean.org
!======================================================================
!
! This is "cross_matrix": analyzer of dependencies to build
! table of dependencies "Make.depend"
!------------------------------------------------------------------
! Usage:
!-------- cross_matrix list_of_files
! for example
! cross_matrix *.F
! or
! cross_matrix *.F *.h
! or
! cross_matrix $(SRCS) inside a makefile
!
! Algorithm:
!-----------
! cross_matrix reads all files from the list arguments it is given,
! and searches for the CPP command #include. If #include commands
! are found, in interprets names within the "..." as new files to be
! open and searched for #include inside it and so on.
!
! cross_matrix investigates chained include statements, for example,
! if file1 contains statement #include "file2", and file2 contains
! statement #include "file3", therefore file3 will be included into
! list of dependencies of "file1"
!
! Optionally, files which are not in the list of arguments AND
! which are not in the present working directory can be excluded
! from the list of dependencies (CPP switch EXCLUDE). A warning
! message will be issued about each file excluded from analysis.
!
#define EXCLUDE
implicit none
integer max_name_size, max_names, max_string_size, input,iout
parameter (max_name_size=62, max_names=956, max_string_size=300,
& input=11, iout=12)
character*300 fname(max_names)
logical ismodule(max_names,max_names)
character*300 modname
character*4 sufname
character string*300, quote*1, double_quote*1, backslash*1
integer nsize(max_names), size, lines, nmax, n_disc, n_excl,
& last_arg, iargc, iocheck, i,j,k,n,
& my_iostat
logical matrix(max_names,max_names), new_name, not_end_of_file
character ctoupper,tab
tab=char(9)
last_arg=iargc()
if (last_arg.eq.0) then
write(*,*) 'ERROR IN cross_matrix: NO FILE NAMES ARE GIVEN'
stop
endif
ismodule(:,:)=.false.
write(*,'(/1x,A,1x,A/)') 'This is CROSS_MATRIX: Creating',
& 'new version of Make.depend.'
quote=char(39) !
double_quote=char(34) ! Reset everything:
backslash=char(92) !
lines=0 ! <-- line counter all files altogether
n_disc=0 ! <-- counter of newly discovered files
n_excl=0 ! <-- counter of excluded files
do j=1,max_names !
nsize(j)=0 ! <-- array of sizes of filenames
do i=1,max_name_size !
fname(j)(i:i)=' ' ! <-- character array of filenames
enddo !
do i=1,max_names !
matrix(i,j)=.false. ! <-- matrix of dependencies:
enddo !
enddo ! Note: matrix(i,j)=.eq..true. means
! that file j depends on i.
do n=1,last_arg
call getarg(n,fname(n))
i=max_name_size+1
1 i=i-1
if (fname(n)(i:i).eq.' ' .and. i.gt.1) goto 1
nsize(n)=i
enddo
nmax=last_arg
open(unit=iout, file='Make.depend', form='formatted')
write(iout,'(3(A,1x,A/),A/A/A/A/A/A)')
& '# Make.depend: list of dependencies generated by',
& 'cross_matrix.', '# WARNING: THIS IS A MACHINE',
& 'GENERATED FILE: DO NOT EDIT !!!!!', '# To create',
& 'or update this file use commands:', '#',
& '# cross_matrix *.F', '# or',
& '# cross_matrix *.F *.h', '# or',
& '# make depend'
n=0
2 n=n+1
not_end_of_file=.true.
IF (n.GT.nmax) GOTO 29
IF (fname(n)(nsize(n)-3:nsize(n)).EQ.'.mod') goto 2
open(unit=input, file=fname(n), form='formatted',
& status='old', err=3)
goto 4
3 continue
#ifdef EXCLUDE
n_excl=n_excl+1
write(iout,'(A/A,2x,A/A)') '#',
& '# WARNING: File is not found:',fname(n)(1:nsize(n)),
& '# This file is excluded from the dependency list.'
do i=1,nsize(n)
fname(n)(i:i)=' '
enddo
nsize(n)=0
goto 2
#endif
4 string(1:1)=' '
read(input,'(A)',iostat=iocheck,end=5) string
lines=lines+1
if (iocheck.eq.0 .and. string(1:1).ne.'#') goto 19
goto 6 ! Search for word include,
5 not_end_of_file=.false. ! then search for double
6 i=2 ! quotation marks, then
7 if (string(i:i).ne.'i') then ! read portion of the
i=i+1 ! string between "..."s.
if (i.lt.max_string_size) goto 7
elseif (string(i:i+6) .eq. 'include') then
i=i+7
8 if (string(i:i).eq.double_quote) then
j=i+2
9 if (string(j:j).eq.double_quote) then
size=j-i-1 ! Presume that the newly
new_name=.true. ! encountered name does
do k=1,nmax ! not exist in catalog.
if (size .eq. nsize(k)) then
if (string(i+1:j-1) .eq. fname(k)(1:size)) then
new_name=.false. !
matrix(k,n)=.true. ! Then test the new name
endif ! against those already in
endif ! catalog. If matches were
enddo ! found, reject it as a
if (new_name) then ! new name and make entry
n_disc=n_disc+1 ! in dependency in matrix.
nmax=nmax+1 ! Record the new name and
matrix(nmax,n)=.true. ! its size into catalog,
nsize(nmax)=size ! if it was not rejected.
fname(nmax)(1:size)=string(i+1:j-1)
do i=size+1,max_name_size
fname(nmax)(i:i)=' '
enddo
endif
elseif (j.lt.max_string_size) then
j=j+1
goto 9
endif
elseif (i.lt.max_string_size) then
i=i+1
goto 8
endif
endif
19 continue
if (iocheck.eq.0 .and.
& ((string(1:1).ne.' ').AND.
& (string(1:1).ne.tab))) goto 4
i=2
17 if ((string(i:i).eq.' ').OR.(string(i:i).eq.tab)) then
i=i+1
if (i.lt.max_string_size) goto 17
elseif ((string(i:i+3) .eq. 'USE ').or.
& (string(i:i+3) .eq. 'use ')) then
sufname=string(i:i+3)
i=i+4
j=i
18 j=j+1
if ((string(j:j).EQ.' ').or.(string(j:j).EQ.tab)) then
j=j-1
size=j-i+1
do k=1,size
! modname(k:k)=ctoupper(string(i+k-1:i+k-1))
modname(k:k)=string(i+k-1:i+k-1)
end do
modname(size+1:size+4)='.F90'
size=size+4
open(unit=125, file=modname(1:size), form='formatted',
& status='old', iostat=my_iostat)
close(125)
if(my_iostat /= 0) then
size=size-4
modname(size+1:size+2)='.F'
size=size+2
endif
new_name=.true. ! encountered name does
do k=1,nmax ! not exist in catalog.
if (size .eq. nsize(k)) then
if (modname(1:size) .eq. fname(k)(1:size)) then
new_name=.false. !
matrix(k,n)=.true. ! Then test the new name
ismodule(k,n)=.true.
endif ! against those already in
endif ! catalog. If matches were
enddo ! found, reject it as a
if (new_name) then ! new name and make entry
n_disc=n_disc+1 ! in dependency in matrix.
nmax=nmax+1 ! Record the new name and
matrix(nmax,n)=.true. ! its size into catalog,
nsize(nmax)=size ! if it was not rejected.
fname(nmax)(1:size)=modname(1:size)
ismodule(nmax,n)=.true.
do i=size+1,max_name_size
fname(nmax)(i:i)=' '
enddo
endif
elseif (j.lt.max_string_size) then
goto 18
end if
end if
if (not_end_of_file) goto 4
close (unit=input)
if (n.lt.nmax) goto 2
29 continue
i=0 ! Investigate possible secondary
10 do n=1,nmax ! dependencies. This is equivalent
do k=1,nmax ! to operation of logical addition:
if (matrix(k,n)) then !
do j=1,nmax ! if
if (matrix(j,k)) then ! file1 depends on file2
matrix(j,n)=.true.
if (ismodule(j,k)) ismodule(j,n)=.true.
endif
! and
enddo ! file2 depends on file3
endif ! then
enddo ! file1 depends on file3
enddo !
j=0 ! This is an iterative
do n=1,nmax ! procedure, since staged
do k=1,nmax ! include statements are
if (matrix(k,n)) j=j+1 ! possible. The number of .true.
enddo ! elements in the matrix grows
enddo ! when new dependencies are
if (i.ne.j) then ! discovered. The procedure
i=j ! repeats itself until the next
goto 10 ! iteration does not discover
endif ! any new dependencies.
!
! Report statistics of the files:
!
write(iout,'(A/A,5x,I4/A/A,18x,I4/A/A,1x,I4)') '#',
& '# Number of files given for dependency analysis:', last_arg,
& '#', '# Number of newly discovered files:', n_disc, '#',
& '# Number of files excluded from dependency analysis:',n_excl
write(iout,'(A/A,3x,I4/A/A,9x,I6/A)') '#',
& '# Total number of files analyzed for dependencies:', nmax,
& '#', '# Total number of code lines in all files:', lines, '#'
!
! Generate list of dependencies. Two styles are supported, both
! work just fine. If XCOMM_FORMAT is defined, the style of the list
! is similar to that of makefiles generated by imake utility
! recommended by $XConsortium. In this case the target file name
! and the column separator ':' are repeated in all lines which
! correspond to the target dependencies, and its name is also
! repeated one time more wit no characters after ':'.
! If XCOMM_FORMAT is NOT defined, the target file name and the
! column separator ':' are not repeated, while backslach symbol is
! used in the end of each line, if the line needs to be continued
! on the next line.
do n=1,last_arg !!! nmax
if (nsize(n).gt.0) then
#define XCOMM_FORMAT
#ifdef XCOMM_FORMAT
write(iout,'(A1)') '#'
k=0
11 i=nsize(n)
string(1:i)=fname(n)(1:i)
if (string(i-1:i).eq.'.F') string(i:i)='o'
if (string(i-3:i).eq.'.F90') string(i-2:i)='o'
i=i+1
string(i:i)=':'
12 i=i+1
string(i:i)=' '
if (k.eq.0) then
if (fname(n)(nsize(n)-1:nsize(n)).eq.'.F') then
string(i+1:i+nsize(n))=fname(n)(1:nsize(n))
i=i+nsize(n)+1
string(i:i)=' '
endif
if (fname(n)(nsize(n)-3:nsize(n)).eq.'.F90') then
string(i+1:i+nsize(n))=fname(n)(1:nsize(n))
i=i+nsize(n)+1
string(i:i)=' '
endif
endif
13 k=k+1