4#if defined MODEL_COUPLING && defined MCT_LIB
24 integer,
pointer :: val(:)
30 character (len=10),
pointer :: code(:)
46 character (len=40) :: code
47 character (len=40) :: variable
48 character (len=80) :: name
49 character (len=80) :: units
57 character (len=40) :: code
58 character (len=40) :: variable
59 character (len=80) :: name
60 character (len=80) :: units
74 character (len=30) :: string
110 character (len=256),
allocatable ::
inpname(:)
184 integer,
intent(in) :: Nnodes
190 integer,
parameter :: inp = 20
193 integer :: gtype, i, id, ifield, inode, lvar, model, ng, varid
196 real(r8) :: add_offset, scale
198 character (len=40 ) :: code
199 character (len=80 ) :: string
200 character (len=256) :: io_errmsg
201 character (len=MaxLen),
dimension(5) :: Vinfo
209 OPEN (inp, file=trim(
cplname), form=
'formatted', status=
'old', &
210 & iostat=io_err, iomsg=io_errmsg)
211 IF (io_err.ne.0)
THEN
222 READ (inp,*,
err=30,
END=40) Vinfo(1)
223 lvar=len_trim(vinfo(1))
227 IF ((lvar.gt.0).and.(vinfo(1)(1:1).ne.char(33)))
THEN
228 READ (inp,*,err=30) vinfo(2)
229 READ (inp,*,err=30) vinfo(3)
230 READ (inp,*,err=30) vinfo(4)
231 READ (inp,*,err=30) vinfo(5)
232 READ (inp,*,err=30) add_offset
233 READ (inp,*,err=30) scale
237 SELECT CASE (trim(adjustl(vinfo(5))))
269 fields(varid) % code = trim(adjustl(vinfo(1)))
270 fields(varid) % variable = trim(adjustl(vinfo(2)))
271 fields(varid) % name = trim(adjustl(vinfo(3)))
272 fields(varid) % units = trim(adjustl(vinfo(4)))
273 fields(varid) % FieldID = varid
274 fields(varid) % GridType = gtype
275 fields(varid) % AddOffset = add_offset
276 fields(varid) % scale = scale
279 30
WRITE (stdout,80) trim(adjustl(vinfo(1)))
314 IF (trim(adjustl(
fields(i)%code)).eq. &
315 & trim(adjustl(
export(model)%code(ifield))))
THEN
322 IF (trim(adjustl(
fields(i)%code)).eq. &
323 & trim(adjustl(
import(model)%code(ifield))))
THEN
334 code=adjustl(
fields(id)%code)
335 IF (ifield.eq.1)
THEN
341 WRITE (stdout,70) model, trim(
exportlist(model)), &
354 IF (.not.
allocated(
pets))
THEN
368 pets(model)%val(i)=inode
374 IF ((inode+1).ne.nnodes)
THEN
375 IF (myrank.eq.0)
THEN
376 WRITE (stdout,80) inode, nnodes
380 IF (myrank.eq.0)
THEN
384 string=
'Ocean Model MPI nodes:'
385 ELSE IF (model.eq.
iwaves)
THEN
386 string=
'Waves Model MPI nodes:'
387 ELSE IF (model.eq.
iatmos)
THEN
388 string=
'Atmos Model MPI nodes:'
390 WRITE (stdout,100) trim(string), &
391 &
pets(model)%val(1), &
397 IF (myrank.eq.0)
THEN
400 string=
'Ocean Export:'
401 ELSE IF (model.eq.
iwaves)
THEN
402 string=
'Waves Export:'
403 ELSE IF (model.eq.
iatmos)
THEN
404 string=
'Atmos Export:'
406 WRITE (stdout,110) trim(string), trim(
exportlist(model))
412 50
FORMAT (/,
' MOD_COUPLER - Unable to open variable information', &
413 &
' file: ',/,15x,a,/,15x,
'ERROR: ',a, &
414 /,15x,
'Default file is located in source directory.')
415 60
FORMAT (/,
' MOD_COUPLER - too small dimension ', &
416 &
'parameter, MV = ',2i5,/,15x, &
417 &
'change file mod_ncparam.F and recompile.')
418 70
FORMAT (/,
' MOD_COUPLER - Unregistered export field for ', &
419 &
' model = ',i1,/,15x,
'ExportList = ',a,/,15x, &
420 &
' check file = ',a)
421 80
FORMAT (/,
' MOD_COUPLER - Number assigned processors: ', &
422 & i3.3,/,15x,
'not equal to spawned MPI nodes: ',i3.3)
423 90
FORMAT (/,
' Model Coupling Parallel Threads:',/)
424100
FORMAT (3x,a,3x,i3.3,
' - ',i3.3)
425110
FORMAT (3x,a,1x,a)
character(len=20), dimension(:), allocatable orderlabel
character(len=256) cplname
integer, dimension(:,:), allocatable couplesteps
type(t_integer), dimension(:), allocatable exportid
integer, dimension(:), allocatable nexport
type(t_string), dimension(:), allocatable export
type(t_field), dimension(maxnumberfields) fields
character(len=240), dimension(:), allocatable exportlist
type(t_integer), dimension(:), allocatable pets
integer, dimension(:), allocatable nthreads
type(t_string), dimension(:), allocatable import
integer, parameter maxnumberfields
integer, dimension(:), allocatable nimport
character(len=256), dimension(:), allocatable inpname
subroutine allocate_coupler(nnodes)
type(t_integer), dimension(:), allocatable importid
real(r8), dimension(:,:), allocatable timeinterval
type(t_io), dimension(:), allocatable err
integer, parameter b3dvar
integer, parameter r3dvar
integer, parameter u3dvar
integer, parameter u2dvar
integer, parameter w3dvar
integer, parameter p2dvar
integer, parameter r2dvar
integer, parameter v2dvar
integer, parameter p3dvar
integer, parameter v3dvar