Closed HyunChaeJung closed 2 weeks ago
oasis_init_localcomm에서 생성한 GRIMs 모델의 local_comm을 모델에 등록 및
mpi 통신에 활용하도록 수정
mpi_comm_world ==> local_comm
use commpi, only : mype, latlen, latstr, latdef, local_comm !!hcjung 20221207
!hcjung 20171222
USE sfc_cpl_oasis3MCT, ONLY : cpl_init
!hcjung 20171222
!!hcjung 20221211
integer :: localcomm
!1hcjung 20221211
call mpi_init(info)
!
if( info.ne.0 ) then
print *,'PE',mype,':error code from mpi_init = ',info
call exit(1)
endif
!
!hcjung 20221128
CALL cpl_init(localcomm)
local_comm=localcomm
!hcjung 20221128
!!hcjung 20221207
USE paramter, ONLY: idim, jdim
USE sfc_cpl_oasis3Mct, ONLY : cpl_def_get_var, cpl_def_put_var
USE sfc_cpl_oasis3Mct, ONLY : cpl_def_box_partition
USE sfc_cpl_oasis3Mct, ONLY : cpl_def_orange_partition
USE sfc_cpl_oasis3Mct, ONLY : cpl_enddef
!!hcjung 20221207
!!hcjung 20221207
print*,'hcjung.. def part'
!! get(NEMO->sst->GRIMs) global box partition
CALL cpl_def_box_partition(2, 1, idim, jdim)
!! put(GRIMs->NEMO) local orange partition
CALL cpl_def_orange_partition(2, 2, latlen(mype), latstr(mype), &
latdef(:), idim, jdim)
!! get var 2 = sst, icefrac
CALL cpl_def_get_var(2, 1, 1, 'sst')
CALL cpl_def_get_var(2, 2, 1, 'icefrac')
!! put var 4 = taux, tauy, qsrmix, qnsmix, dqnsdt
CALL cpl_def_put_var(4, 1, 2, 'taux')
CALL cpl_def_put_var(4, 2, 2, 'tauy')
CALL cpl_def_put_var(4, 3, 2, 'qsrmix')
! CALL cpl_def_put_var(5, 4, 2, 'qnsmix')
CALL cpl_def_put_var(4, 4, 2, 'dqnsdt')
CALL cpl_enddef
!!hcjung 20221207
use commpi !!, only : mype,npes, master !!hcjung 20221128
!!hcjung 20221208
USE comgrad, ONLY : raddt
USE paramter, ONLY : idim, jdim
USE sfc_cpl_oasis3Mct, ONLY : cpl_send, cpl_recv, cpl_sec
USE sfc_cpl_oasis3Mct, ONLY : sst_data, cpl_mask, save_cplvar
USE module_trans
!!hcjung 20221208
!!hcjung 20221211
REAL, ALLOCATABLE :: z_dqlw(:,:), qla_ice(:,:), dqla_ice(:,:), z_dqsb(:,:)
REAL, ALLOCATABLE :: dummy_data(:,:)
INTEGER :: ii, jj, kk, cnt
!!hcjung 20221211
!!hcjung save before u/v stress, qns
IF ( .NOT. ALLOCATED(save_cplvar) ) ALLOCATE(save_cplvar(LONF2S, LATG2S, 4))
save_cplvar(:,:,1) = dusfc(:,:)
save_cplvar(:,:,2) = dvsfc(:,:)
IF ( STEPONE .OR. MOD(REAL(cpl_sec), raddt) .EQ. 0 ) THEN
save_cplvar(:,:,3) = fluxr(:,:,4)
END IF
!!hcjung save before u/v stress, qns
........ after dyn -> phys
!! hcjung 20221207 send to NEMO (oasis3-mct)
!! use comfphys, only: dusfc, dvsfc, dlwsfc, dtsfc, dqsfc
!! use comfphys, only: t2m, q2m, u10m, v10m
!! use comsfc, only: tsea
!! use radiag, only: fluxr
IF ( kdt < 3 ) cpl_sec=INT(shour)
IF ( kdt >= 3 ) cpl_sec=cpl_sec+INT(deltim)
IF ( .NOT. ALLOCATED(z_dqlw) ) ALLOCATE(z_dqlw(LONF2S, LATG2S))
IF ( .NOT. ALLOCATED(qla_ice) ) ALLOCATE(qla_ice(LONF2S, LATG2S))
IF ( .NOT. ALLOCATED(dqla_ice) ) ALLOCATE(dqla_ice(LONF2S, LATG2S))
IF ( .NOT. ALLOCATED(z_dqsb) ) ALLOCATE(z_dqsb(LONF2S, LATG2S))
z_dqlw(:,:) = 4.0 * 0.95 * 5.67e-8 * tsea(:,:)**3
qla_ice(:,:) = 1 * MAX(0.e0, 1.22 * 2.839e6 * 1.4E-3 * sqrt(u10m(:,:)**2 + v10m(:,:)**2) &
* ( 11637800.0 * EXP( -5897.8 / tsea(:,:) ) / 1.22 - q2m(:,:) ) )
DO jj = 1, LATG2S
DO ii = 1, LONF2S
IF ( qla_ice(ii,jj) > 0.0 ) THEN
dqla_ice(ii,jj) = 1 * (-2.839e6) * 1.4e-3 * 11637800.0 * (-5897.8) * sqrt(u10m(ii,jj)**2 + v10m(ii,jj)**2) &
/ tsea(ii,jj)**2 * EXP( -5897.8 / tsea(ii,jj) )
ELSE
dqla_ice(ii,jj) = 0.0
END IF
END DO
END DO
z_dqsb(:,:) = 1.22 * 1000.5 * 1.4e-3 * sqrt(u10m(ii,jj)**2 + v10m(ii,jj)**2)
IF ( mype .EQ. master ) THEN
print*,'hcjung check u',u10m(1:10,1)
print*,'hcjung check v',v10m(1:10,1)
print*,'hcjung check tsea',tsea(1:10,5)
END IF
IF ( kdt .EQ. 1 ) THEN
CALL cpl_send(1, 0, LONF2S, latlen(mype), (dusfc(:,:)-save_cplvar(:,:,1))/REAL(deltim))
CALL cpl_send(2, 0, LONF2S, latlen(mype), (dvsfc(:,:)-save_cplvar(:,:,2))/REAL(deltim))
CALL cpl_send(3, 0, LONF2S, latlen(mype), (fluxr(:,:,4)-save_cplvar(:,:,3))/REAL(raddt))
!CALL cpl_send(4, 0, LONF2S, LATG2S, (dtsfc(:,:)+dqsfc(:,:))*rtime)
CALL cpl_send(4, 0, LONF2S, latlen(mype), (z_dqlw(:,:)+dqla_ice(:,:)+z_dqsb(:,:)))
ELSE
CALL cpl_send(1, cpl_sec, LONF2S, latlen(mype), (dusfc(:,:)-save_cplvar(:,:,1))/REAL(deltim))
CALL cpl_send(2, cpl_sec, LONF2S, latlen(mype), (dvsfc(:,:)-save_cplvar(:,:,2))/REAL(deltim))
CALL cpl_send(3, cpl_sec, LONF2S, latlen(mype), (fluxr(:,:,4)-save_cplvar(:,:,3))/REAL(raddt))
!CALL cpl_send(4, cpl_sec, LONF2S, LATG2S, (dtsfc(:,:)+dqsfc(:,:))*rtime)
CALL cpl_send(4, cpl_sec, LONF2S, latlen(mype), (z_dqlw(:,:)+dqla_ice(:,:)+z_dqsb(:,:)))
END IF
DEALLOCATE(z_dqlw, qla_ice, dqla_ice, z_dqsb)
!!==========hcjung, recieve from NEMO
IF ( kdt .EQ. 1 ) THEN !!dummy recieve
ALLOCATE(dummy_data(LONF2S, LATG2S)); dummy_data=0.0
CALL cpl_recv(1, 0, LONF2S, latlen(mype), dummy_data)
dummy_data=0.0
CALL cpl_recv(2, 0, LONF2S, latlen(mype), dummy_data) !!tmp icetemp
dummy_data=0.0
CALL cpl_recv(3, 0, LONF2S, latlen(mype), dummy_data) !!tmp icefrac
DEALLOCATE(dummy_data)
ELSE
ALLOCATE(dummy_data(LONF2S, LATG2S)); dummy_data=0.0
CALL cpl_recv(1, cpl_sec, LONF2S, latlen(mype), dummy_data)
IF ( cpl_sec .NE. 0 .AND. MOD(cpl_sec, 10800) .EQ. 0 ) THEN
ALLOCATE(cpl_mask(LONF2S*LATG2S)); cpl_mask=0.0
ALLOCATE(sst_data(LONF2S*LATG2S)); sst_data=0.0
cnt = 0
DO jj = 1, LATG2S
DO ii = 1, LONF2S
cnt = cnt + 1
IF ( dummy_data(ii,jj) .NE. 0.0 ) THEN
sst_data(cnt) = dummy_data(ii,jj)
ELSE
cpl_mask(cnt) = 1.0
END IF
END DO
END DO
END IF
dummy_data=0.0
CALL cpl_recv(2, cpl_sec, LONF2S, latlen(mype), dummy_data) !!tmp icetemp
dummy_data=0.0
CALL cpl_recv(3, cpl_sec, LONF2S, latlen(mype), dummy_data) !!tmp icefrac
DEALLOCATE(dummy_data)
END IF
!!===========hcjung, recieve from NEMO
......
nsfc=1
do nsfcv = 1,numsfcv
ngrb=is2g(nsfc)
if(ngrb.ne.9999) then
if(fn(ngrb)(1:4).ne.' ') then
IF ( nsfcv .NE. 1 ) THEN !!exclude sst hcjung 20221226
lsf(nsfc)=.true.
call sfc_grib_solver(lugb,fn(ngrb),idim,jdim,slmask, &
ngrb,iy,im,id,ih,fh, &
fnmskg,grbfld(1,nsfc))
END IF !!hcjung 20221226
else
lsf(nsfc)=.false.
endif
endif
nsfc=nsfc+ksfc(nsfc)
enddo
USE sfc_cpl_oasis3Mct, only: sst_data, cpl_mask !!hcjung 20221227
!!hcjung update sst & ocean mask(=0)
grbfldp(:,1) = sst_data(:) !!hcjung 20221226
slmaskp(:) = cpl_mask(:) !!hcjung 20221226
DEALLOCATE(sst_data, cpl_mask)
!!==================================
DO WHILE ( istp <= nitend .AND. nstop == 0 )
IF (lk_oasis) CALL sbc_cpl_snd( istp ) !!Coupling to atmos !! hcjung 20221214
#if defined key_agrif
CALL stp ! AGRIF: time stepping
#else
CALL stp( istp ) ! standard time stepping
#endif
IF ( istp == nitend ) THEN !!hcjung 20221229
IF (lk_oasis) CALL sbc_cpl_snd( istp+nit000 ) !!Coupling to atmos !! hcjung 20221214
IF (lk_oasis) CALL sbc_cpl_rcv( istp+nit000, nn_fsbc, nn_ice) !!dummy rcv !!hcjung 20221214
END IF !!hcjung 20221229
istp = istp + 1
! IF (lk_oasis) CALL sbc_cpl_snd( istp ) !!Coupling to atmos !! hcjung 20221214
IF( lk_mpp ) CALL mpp_max( nstop )
END DO
!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
! Coupled mode
!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
! IF( lk_oasis ) CALL sbc_cpl_snd( kstp ) ! coupled mode : field exchanges !!hcjung <--- send 위치 수정
!
taux(U grid), tauy(V grid)만 받기 위한 수정(glosea6 코드 참조)
SUBROUTINE sbc_cpl_init( k_ice )
CASE( 'U,V,F' )
srcv(jpr_otx1:jpr_otz1)%clgrid = 'U' ! oce components given at U-point
srcv(jpr_otx2:jpr_otz2)%clgrid = 'V' ! and V-point
srcv(jpr_itx1:jpr_itz1)%clgrid = 'F' ! ice components given at F-point
!srcv(jpr_otx1:jpr_otz2)%laction = .TRUE. ! receive oce components on grid 1 & 2 !!hcjung 20221121 following glosea6
srcv(jpr_itx1:jpr_itz1)%laction = .TRUE. ! receive ice components on grid 1 only
srcv(jpr_otx1)%laction = .TRUE. !!hcjung 20221121 following glosea6
srcv(jpr_oty1)%laction = .TRUE. !!hcjung 20221121 following glosea6
.........
.........
SUBROUTINE sbc_cpl_rcv( kt, k_fsbc, k_ice )
REAL(wp), POINTER, DIMENSION(:,:) :: ztx, zty, zmsk, zemp, zqns, zqsr, ztx2, zty2 !!hcjung 20221222 following glosea6 add ztx2, zty2
INTEGER :: ikchoix !!hcjung 20221222 following glosea6
CALL wrk_alloc( jpi,jpj, ztx, zty, zmsk, zemp, zqns, zqsr, ztx2, zty2 )!hcjung 20221222 following glosea6 add ztx2, zty2
............
IF( TRIM( sn_rcv_tau%clvor ) == 'eastward-northward' ) THEN ! 2 components oriented along the local grid
! ! (geographical to local grid -> rotate the components)
!!hcjung 20221222 following glosea6
IF( srcv(jpr_otx1)%clgrid == 'U' .AND. (.NOT. srcv(jpr_otx2)%laction) ) THEN !!hcjung 20221222 following glosea6
! Temporary code for HadGEM3 - will be removed eventually.
! Only applies when we have only taux on U grid and tauy on V grid
DO jj=2,jpjm1
DO ji=2,jpim1
ztx(ji,jj)=0.25*vmask(ji,jj,1) &
*(frcv(jpr_otx1)%z3(ji,jj,1)+frcv(jpr_otx1)%z3(ji-1,jj,1) &
+frcv(jpr_otx1)%z3(ji,jj+1,1)+frcv(jpr_otx1)%z3(ji-1,jj+1,1))
zty(ji,jj)=0.25*umask(ji,jj,1) &
*(frcv(jpr_oty1)%z3(ji,jj,1)+frcv(jpr_oty1)%z3(ji+1,jj,1) &
+frcv(jpr_oty1)%z3(ji,jj-1,1)+frcv(jpr_oty1)%z3(ji+1,jj-1,1))
ENDDO
ENDDO
ikchoix = 1
CALL repcmo (frcv(jpr_otx1)%z3(:,:,1),zty,ztx,frcv(jpr_oty1)%z3(:,:,1),ztx2,zty2,ikchoix)
CALL lbc_lnk (ztx2,'U', -1. )
CALL lbc_lnk (zty2,'V', -1. )
frcv(jpr_otx1)%z3(:,:,1)=ztx2(:,:)
frcv(jpr_oty1)%z3(:,:,1)=zty2(:,:)
ELSE !!hcjung 20221222 following glosea6
>기존 라인
CALL rot_rep( frcv(jpr_otx1)%z3(:,:,1), frcv(jpr_oty1)%z3(:,:,1), srcv(jpr_otx1)%clgrid, 'en->i', ztx )
IF( srcv(jpr_otx2)%laction ) THEN
CALL rot_rep( frcv(jpr_otx2)%z3(:,:,1), frcv(jpr_oty2)%z3(:,:,1), srcv(jpr_otx2)%clgrid, 'en->j', zty )
ELSE
CALL rot_rep( frcv(jpr_otx1)%z3(:,:,1), frcv(jpr_oty1)%z3(:,:,1), srcv(jpr_otx1)%clgrid, 'en->j', zty )
ENDIF
frcv(jpr_otx1)%z3(:,:,1) = ztx(:,:) ! overwrite 1st component on the 1st grid
frcv(jpr_oty1)%z3(:,:,1) = zty(:,:) ! overwrite 2nd component on the 2nd grid
>기존 라인
END IF
ENDIF
~/nemo_v3_6_stable/NEMO/OPA_SRC/SBC/geo2ocean.F90
SUBROUTINE repcmo ( pxu1, pyu1, pxv1, pyv1, &
px2 , py2, kchoix ) !!hcjung 20221222 following glosea6, kchoix 추가
INTEGER, INTENT(IN) :: kchoix !!hcjung 20221222 following glosea6
SELECT CASE (kchoix)
CASE ( 1)
! Change from geographic to stretched coordinate
! ----------------------------------------------
> 기존 라인
CALL rot_rep( pxu1, pyu1, 'U', 'en->i',px2 )
CALL rot_rep( pxv1, pyv1, 'V', 'en->j',py2 )
> 기존 라인
CASE (-1)
! Change from stretched to geographic coordinate
! ----------------------------------------------
CALL rot_rep( pxu1, pyu1, 'U', 'ij->e',px2 )
CALL rot_rep( pxv1, pyv1, 'V', 'ij->n',py2 )
END SELECT
!!hcjung 20221222 following glosea6
key_oasis3 key_oa3mct_v3
rn_rdt = 3600. ! hcjung 20221214 for atm coulpling
ln_cpl = .false. -> .true.
! send ##hcjung 20221117 sn_snd_temp = 'oce only' , 'no' , '' , '' , '' sn_snd_alb = 'none' , 'no' , '' , '' , '' sn_snd_thick = 'none' , 'no' , '' , '' , '' sn_snd_crt = 'none' , 'no' , 'spherical' , 'eastward-northward' , 'T' sn_snd_co2 = 'none' , 'no' , '' , '' , '' ! receive ##hcjung 20221117 sn_rcv_w10m = 'none' , 'no' , '' , '' , '' sn_rcv_taumod = 'none' , 'no' , '' , '' , '' sn_rcv_tau = 'oce only' , 'no' , 'spherical' , 'eastward-northward', 'U,V,F' sn_rcv_dqnsdt = 'coupled' , 'no' , '' , '' , '' sn_rcv_qsr = 'oce only' , 'no' , '' , '' , '' sn_rcv_qns = 'none' , 'no' , '' , '' , '' sn_rcv_emp = 'none' , 'no' , '' , '' , '' sn_rcv_rnf = 'none' , 'no' , '' , '' , '' sn_rcv_cal = 'none' , 'no' , '' , '' , '' sn_rcv_iceflx = 'none' , 'no' , '' , '' , '' sn_rcv_co2 = 'none' , 'no' , '' , '' , '' !! send
nn_cplmodel = 1 ! Maximum number of models to/from which NEMO is potentialy sending/receiving data
### GRIMs-NEMO 수행을 위한 ice namelist 설정 <- 연구필요
- error message: In coupled mode, use parsub = 0. or send dqla
- namelist_ice_ref
&namicethd ! ice thermodynamic parsub = 1.0 -> 0.0 ! switch for snow sublimation or not on 하기 위해서는 dqla 변수를 교환해야 할듯
**- nn_fsbc = 5->4 :: 혹시 coupling dt와 동일해야 하는가? 3=10800sec**
### set NEMO work files
export LD_LIBRARY_PATH=/usr/local/mpi/intel19/openmpi-3.1.6/lib:/usr/local/netcdf/4.1.3_intel19/lib:/home/grimsjung/Library/oasis3-mct/lib:/usr/local/hdf5/1.10.5_intel19/lib:/usr/local/intel/lib/intel64:${LD_LIBRARY_PATH}
export NEMO_WORK_DIR=/home/grimsjung/hcjung/cpl_test/nemo_v3_6_stable export NEMO_INPUT_DIR=/home/grimsjung/hcjung/cpl_test/nemo_orca2_data export CPL_GRID_DIR=/home/grimsjung/hcjung/cpl_test/cpl_data/GRIMs-NEMO export NEMO_EXEC=${NEMO_WORK_DIR}/CONFIG/ORCA2_LIM_PISCES/BLD/bin/nemo.exe
cp -f ${CPL_GRID_DIR}/ ${EXECDIR} cp -f ${NEMO_WORK_DIR}/EXP00/ ${EXECDIR} cp -f ${NEMO_INPUT_DIR}/* ${EXECDIR} cp -f ${NEMO_EXEC} ${EXECDIR}
chmod 777 ${EXECDIR} ############################################
@FCSTENV@ -np @FCST_NPES@ ./$PROG.x : -np @NEMO_NPES@ nemo.exe 1>fcstout.ft$fh 2>&1
- ~/GRIMs-Chem/runs/configure-run <-- MPI 수행을 위해 수정
NCPUS=1 # number of threads (when MARCH = thread or hybrid)
GRIMS_NPES=1
NEMO_NPES=1
NPES=${GRIMS_NPES}
TNPES=expr ${GRIMS_NPES} + ${NEMO_NPES}
# number of MPI pes (when MARCH = mpi or hybrid)
NCPU_PER_NODE=36 # number of total cores per node
NCOL=1 # number of column (when MARCH=mpi or hybrid)
#
if [ $march = 'mpi' ]; then
if [ ${TNPES} -le $NCPU_PER_NODE ]; then ##HCJUNG 20221229
NNODES=1
NPES_PER_NODE=${TNPES} ##hcjung 20221229
else
echo "($npes-1)/$NCPU_PER_NODE+1" | bc
##hcjung 20221229 NNODES=`echo "(${TNPES}-1)/$NCPU_PER_NODE+1" | bc` ##hcjung 20221229
NPES_PER_NODE=$NCPU_PER_NODE
ncpus=1 # forced
fi
fi
s%@NEMO_NPES@%${NEMO_NPES}%g
#hcjung 20171222
OASISDIR = @OASIS_DIR@
OASIS_LIB = $(OASISDIR)/lib/libpsmile.MPI1.a $(OASISDIR)/lib/libmct.a $(OASISDIR)/lib/libmpeu.a $(OASISDIR)/lib/libscrip.a
OASIS_INC = -I$(OASISDIR)/build/lib/mct -I$(OASISDIR)/build/lib/psmile.MPI1 -I$(OASISDIR)/build/lib/scrip -I$(OASISDIR)/include
STATIC_LIBS= @STATIC_LIBS@
NETCDFDIR = @NETCDF_DIR@
NETCDF_INC = -I$(NETCDFDIR)/include
NETCDF_LIB = $(NETCDFDIR)/lib/libnetcdff.a $(NETCDFDIR)/lib/libnetcdf.a
#hcjung 20171222
LIBS = @FCST_SFCL@ ${INSTALLDLIB}/share.a @FCST_COMMON@ ${LIB_DIR}/modelib.a ${LIB_DIR}/w3lib.a @FCST_MPI@ @FCST_CHEM@ @EXTRA_LIBS@ ${INSTALLDLIB}/cpl.a ${OASIS_LIB} ${NETCDF_LIB} ${STATIC_LIBS} ##hcjung 20221128
.F90.f90 :
${CPP} -P ${INCLUDE_DIR} ${OASIS_INC} $*.F90 >$*.i #hjcung 20171222
sed '/^ *$$/d;s/\/\*/\!/' $*.i >$*.f90 ; rm $*.i
.F90.o :
${CPP} -P ${INCLUDE_DIR} ${OASIS_INC} $*.F90 >$*.i #hcjung 20171222
sed '/^ *$$/d;s/\/\*/\!/' $*.i >$*.f90 ; rm $*.i
${F77} ${FORT_FLAGS} ${OASIS_INC} -c $*.f90 #hcjung 20171222
.f90.o :
${F77} ${FORT_FLAGS} ${OASIS_INC} -c $*.f90 #hcjung 20171222
#hcjung 20221128
OASISDIR = @OASIS_DIR@
OASIS_LIB = $(OASISDIR)/lib/libpsmile.MPI1.a $(OASISDIR)/lib/libmct.a $(OASISDIR)/lib/libmpeu.a $(OASISDIR)/lib/libscrip.a
OASIS_INC = -I$(OASISDIR)/build/lib/mct -I$(OASISDIR)/build/lib/psmile.MPI1 -I$(OASISDIR)/build/lib/scrip -I$(OASISDIR)/include
#hcjung 20221127
INCLUDE_DIR = @INCLUDE_DIR@ ${OASIS_INC} ##hcjung 20221129
export CHEM_INPUT_DIR='/home/grimsjung/hcjung/cpl_test/GRIMs_data/data'
###hcjung add CHEM_INPUT_DIR 20221103
s%@CHEM_INPUT_DIR@%${CHEM_INPUT_DIR}%g
##hcjung 20221101 add OASIS_DIR, NETCDF_DIR
s%@OASIS_DIR@%$OASIS_DIR%g
s%@NETCDF_DIR@%$NETCDF_DIR%g
if [ $MARCH = mpi -o $MARCH = hybrid ]; then
##hcjung 20221128
MARCH_SRC_DIRS="\
share \
common \
common_par \
mpi \
cpl \
"
else
##hcjung 20221128
MARCH_SRC_DIRS="\
cpl \
share \
common \
common_par \
"
fi
if [ $MARCH = mpi -o $MARCH = hybrid ]; then
##hcjung 20221128
MARCH_SRC_DIRS="\
share \
common_par \
rmpi \
cpl \
sfcl_par \
chem \
rgmp_par \
rmpl_par \
rpgb_par \
rfcst_par \
"
else
MARCH_SRC_DIRS="share"
fi
namcouple