65 CHARACTER(LEN=6) :: CL_MODEL_NAME =
'wwatch'
68 INTEGER,
PARAMETER :: ip_maxfld=50
72 CHARACTER(LEN = 8) :: cl_field_name
73 INTEGER :: il_field_id
134 INTEGER,
INTENT(OUT) :: id_lcomm
140 CALL oasis_init_comp(il_compid, cl_model_name, il_err)
141 IF (il_err /= 0)
THEN
142 CALL oasis_abort(il_compid,
'CPL_OASIS_INIT',
'Problem during oasis_init_comp')
146 CALL oasis_get_localcomm(id_lcomm, il_err)
147 IF (il_err /= 0)
THEN
148 CALL oasis_abort(il_compid,
'CPL_OASIS_INIT',
'Problem during oasis_get_localcomm')
212 LOGICAL,
INTENT(IN) :: ld_master
213 INTEGER,
INTENT(IN) :: id_lcomm
218 INTEGER,
ALLOCATABLE :: mask(:,:)
219 INTEGER :: i, ix, iy, nxw, nxe, nys, nyn, inode, ierr_mpi
220 REAL,
ALLOCATABLE :: lon(:,:),lat(:,:),area(:,:), &
221 corlon(:,:,:),corlat(:,:,:)
233 CALL oasis_start_grids_writing(ierr_mpi)
237 IF (gtype .EQ. rlgtype .OR. gtype .EQ. clgtype)
THEN
254 ALLOCATE ( lon(nnodes,1), lat(nnodes,1) )
259 lon(i,1)=xgrd(iy,ix)*factor
260 lat(i,1)=ygrd(iy,ix)*factor
265 ALLOCATE ( area(nnodes,1), corlon(nnodes,1,4), corlat(nnodes,1,4) )
270 corlon(i,1,1)=lon(i,1)+hpfac(iy,ix)/2.*factor
271 corlon(i,1,2)=lon(i,1)-hpfac(iy,ix)/2.*factor
272 corlon(i,1,3)=lon(i,1)-hpfac(iy,ix)/2.*factor
273 corlon(i,1,4)=lon(i,1)+hpfac(iy,ix)/2.*factor
274 corlat(i,1,1)=lat(i,1)+hqfac(iy,ix)/2.*factor
275 corlat(i,1,2)=lat(i,1)+hqfac(iy,ix)/2.*factor
276 corlat(i,1,3)=lat(i,1)-hqfac(iy,ix)/2.*factor
277 corlat(i,1,4)=lat(i,1)-hqfac(iy,ix)/2.*factor
278 area(i,1)=hpfac(iy,ix)*hqfac(iy,ix)
283 ALLOCATE ( mask(nnodes,1) )
289 IF ((mapsta(iy,ix) .EQ. 1))
THEN
297 ELSE IF( gtype .EQ. smctype )
THEN
307 ALLOCATE ( lon(nnodes,1), lat(nnodes,1) )
308 ALLOCATE ( area(nnodes,1), corlon(nnodes,1,4), corlat(nnodes,1,4) )
309 ALLOCATE ( mask(nnodes,1) )
315 corlon(i,1,1) =
x0 +
ijkcel(1,i)*dlon
317 corlon(i,1,3) = corlon(i,1,2)
318 corlon(i,1,4) = corlon(i,1,1)
319 corlat(i,1,1) =
y0 +
ijkcel(2,i)*dlat
320 corlat(i,1,2)=corlat(i,1,1)
322 corlat(i,1,4)=corlat(i,1,3)
334 WRITE(*,*)
'TO BE IMPLEMENT FOR UNSTRUCTURED GRIDS'
338 CALL oasis_write_grid(
'ww3t',nnodes,1,lon,lat)
339 CALL oasis_write_corner(
'ww3t',nnodes,1,4,corlon,corlat)
340 CALL oasis_write_area(
'ww3t',nnodes,1,area)
341 CALL oasis_write_mask(
'ww3t',nnodes,1,mask)
345 CALL oasis_terminate_grids_writing()
357 CALL mpi_bcast(nnodes,1,mpi_integer,0,id_lcomm,ierr_mpi)
424 INTEGER,
INTENT(IN) :: ndso
425 CHARACTER(LEN=1024),
INTENT(IN) :: rcv_str,snd_str
431 INTEGER :: il_part_id
432 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: ila_paral
433 INTEGER,
DIMENSION(4) :: ila_shape
434 INTEGER,
DIMENSION(2) :: ila_var_nodims
435 INTEGER :: isea, jsea, ix, iy
436 INTEGER :: nhxw, nhxe, nhys, nhyn
437 LOGICAL :: ll_mpi_file
447 nhxw = 1 ; nhxe =
nx ; nhys = 1 ; nhyn =
ny
453 ALLOCATE(ila_paral(2+
nseal*2))
466 ila_paral(jsea*2+1) = (iy - nhyn -1)*(
nx - nhxe - nhxw) + (ix - nhxw - 1)
467 ila_paral(jsea*2+2) = 1
474 ALLOCATE(ila_paral(2+
nseal))
491 WRITE(*,*)
'TO BE VERIFIED FOR UNSTRUCTURED GRIDS'
496 ila_paral(jsea*2+2) = 1
503 CALL oasis_def_partition(il_part_id, ila_paral,il_err,nnodes)
505 CALL oasis_abort(il_compid,
'CPL_OASIS_DEFINE',
'Problem during oasis_def_partition')
510 ila_shape(:) = (/1,
nseal, 1, 1 /)
512 ila_var_nodims(1) = 2
513 ila_var_nodims(2) = 1
520 CALL oasis_def_var (
snd_fld(ib_i)%IL_FIELD_ID &
521 & ,
snd_fld(ib_i)%CL_FIELD_NAME &
529 IF (il_err /= 0)
THEN
530 CALL oasis_abort(il_compid,
'CPL_OASIS_DEFINE',
'Problem during oasis_def_var')
537 CALL oasis_def_var (
rcv_fld(ib_i)%IL_FIELD_ID &
538 & ,
rcv_fld(ib_i)%CL_FIELD_NAME &
546 IF (il_err /= 0)
THEN
547 CALL oasis_abort(il_compid,
'CPL_OASIS_DEFINE',
'Problem during oasis_def_var')
553 CALL oasis_enddef(il_err)
555 IF (il_err /= 0)
THEN
556 CALL oasis_abort(il_compid,
'CPL_OASIS_DEFINE',
'Problem during oasis_enddef')
562 SUBROUTINE cpl_oasis_snd(ID_NB, ID_TIME, RDA_FIELD, LD_ACTION)
608 INTEGER,
INTENT(IN) :: id_nb
609 INTEGER,
INTENT(IN) :: id_time
610 REAL(kind=8), dimension(:,:),
INTENT(IN) :: rda_field
611 LOGICAL,
INTENT(OUT) :: ld_action
621 CALL oasis_put (
snd_fld(id_nb)%IL_FIELD_ID &
627 ld_action = il_info == oasis_sent .OR. il_info == oasis_torest .OR. &
628 & il_info == oasis_sentout .OR. il_info == oasis_torestout
633 SUBROUTINE cpl_oasis_rcv(ID_NB, ID_TIME, RDA_FIELD, LD_ACTION)
679 INTEGER,
INTENT(IN) :: id_nb
680 INTEGER,
INTENT(IN) :: id_time
681 REAL(kind=8), dimension(:,:),
INTENT(OUT) :: rda_field
682 LOGICAL,
INTENT(OUT) :: ld_action
692 CALL oasis_get (
rcv_fld(id_nb)%IL_FIELD_ID &
698 ld_action = il_info == oasis_recvd .OR. il_info == oasis_fromrest .OR. &
699 & il_info == oasis_recvout .OR. il_info == oasis_fromrestout
739 CALL oasis_terminate(il_err)
741 IF (il_err /= 0)
THEN
742 CALL oasis_abort(il_compid,
'CPL_OASIS_FINALIZE',
'Problem during oasis_terminate')
748 SUBROUTINE get_list_exch_field(NDSO, RCV, SND, ID_NB_RCV, ID_NB_SND, RCV_STR, SND_STR)
810 TYPE(
cpl_field),
DIMENSION(IP_MAXFLD),
INTENT (INOUT) :: rcv, snd
811 INTEGER,
INTENT(INOUT) :: id_nb_rcv, id_nb_snd
812 INTEGER,
INTENT(IN) :: ndso
813 CHARACTER(LEN=1024),
INTENT(IN) :: rcv_str, snd_str
818 CHARACTER(LEN=100) :: out_names(50), teststr
832 DO WHILE (len_trim(out_names(iout+1)).NE.0)
833 teststr=out_names(iout+1)
834 SELECT CASE(trim(teststr(1:6)))
842 id_nb_rcv=id_nb_rcv+1
843 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3_OWDH'
846 id_nb_rcv=id_nb_rcv+1
847 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3_OWDU'
850 id_nb_rcv=id_nb_rcv+1
851 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3_OWDV'
855 id_nb_rcv=id_nb_rcv+1
856 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3__SSH'
860 id_nb_rcv=id_nb_rcv+1
861 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3_OSSU'
864 id_nb_rcv=id_nb_rcv+1
865 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3_OSSV'
875 id_nb_rcv=id_nb_rcv+1
876 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3__U10'
879 id_nb_rcv=id_nb_rcv+1
880 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3__V10'
884 id_nb_rcv=id_nb_rcv+1
885 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3_UTAU'
888 id_nb_rcv=id_nb_rcv+1
889 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3_VTAU'
893 id_nb_rcv=id_nb_rcv+1
894 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3_RHOA'
904 id_nb_rcv=id_nb_rcv+1
905 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3__IC1'
909 id_nb_rcv=id_nb_rcv+1
910 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3__IC5'
914 id_nb_rcv=id_nb_rcv+1
915 rcv(id_nb_rcv)%CL_FIELD_NAME=
'WW3__ICE'
920 WRITE (ndso,1001) trim(teststr(1:6))
932 DO WHILE (len_trim(out_names(iout+1)).NE.0)
933 teststr=out_names(iout+1)
934 SELECT CASE(trim(teststr(1:6)))
942 id_nb_snd = id_nb_snd +1
943 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3__OHS'
947 id_nb_snd = id_nb_snd +1
948 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_ODRY'
952 id_nb_snd = id_nb_snd +1
953 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_T0M1'
957 id_nb_snd = id_nb_snd +1
958 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3__T01'
962 id_nb_snd = id_nb_snd +1
963 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_CDIR'
966 id_nb_snd = id_nb_snd +1
967 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_SDIR'
972 id_nb_snd = id_nb_snd +1
973 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3__DIR'
977 id_nb_snd = id_nb_snd +1
978 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3__BHD'
982 id_nb_snd = id_nb_snd +1
983 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_TWOX'
986 id_nb_snd = id_nb_snd +1
987 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_TWOY'
991 id_nb_snd = id_nb_snd +1
992 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_TOCX'
995 id_nb_snd = id_nb_snd +1
996 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_TOCY'
1000 id_nb_snd = id_nb_snd +1
1001 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3__FOC'
1005 id_nb_snd = id_nb_snd +1
1006 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_TBBX'
1009 id_nb_snd = id_nb_snd +1
1010 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_TBBY'
1014 id_nb_snd = id_nb_snd +1
1015 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3__FBB'
1019 id_nb_snd = id_nb_snd +1
1020 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_UBRX'
1023 id_nb_snd = id_nb_snd +1
1024 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_UBRY'
1028 id_nb_snd = id_nb_snd +1
1029 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_TAWX'
1032 id_nb_snd = id_nb_snd +1
1033 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_TAWY'
1037 id_nb_snd = id_nb_snd +1
1038 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3___LM'
1042 id_nb_snd = id_nb_snd +1
1043 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3__WNM'
1047 id_nb_snd = id_nb_snd +1
1048 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_TUSX'
1051 id_nb_snd = id_nb_snd +1
1052 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_TUSY'
1056 id_nb_snd = id_nb_snd +1
1057 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_USSX'
1060 id_nb_snd = id_nb_snd +1
1061 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_USSY'
1065 id_nb_snd = id_nb_snd +1
1066 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_OCHA'
1075 id_nb_snd = id_nb_snd +1
1076 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3__AHS'
1080 id_nb_snd = id_nb_snd +1
1081 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_WSSU'
1084 id_nb_snd = id_nb_snd +1
1085 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_WSSV'
1089 id_nb_snd = id_nb_snd +1
1090 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_ACHA'
1094 id_nb_snd = id_nb_snd +1
1095 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3___FP'
1099 id_nb_snd = id_nb_snd +1
1100 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3___TP'
1104 id_nb_snd=id_nb_snd+1
1105 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3__FWS'
1115 id_nb_snd = id_nb_snd +1
1116 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_ICEF'
1120 id_nb_snd = id_nb_snd +1
1121 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_TWIX'
1123 id_nb_snd = id_nb_snd +1
1124 snd(id_nb_snd)%CL_FIELD_NAME=
'WW3_TWIY'
1128 WRITE (ndso,1002) trim(teststr(1:6))
1135 1001
FORMAT (/
' *** WAVEWATCH III WARNING IN W3OACPMD : '/ &
1136 ' REQUESTED COUPLING RECEIVED FIELD ',a,
' WAS NOT RECOGNIZED.'/)
1138 1002
FORMAT (/
' *** WAVEWATCH III WARNING IN W3OACPMD : '/ &
1139 ' REQUESTED COUPLING SENT FIELD ',a,
' WAS NOT RECOGNIZED.'/)
1142 END SUBROUTINE get_list_exch_field