Oasis3-MCT
mod_oasis_auxiliary_routines.F90
Go to the documentation of this file.
1 
2 !> Auxiliary OASIS user interfaces
3 
5 !---------------------------------------------------------------------
6 
11  USE mod_oasis_timer
12  USE mod_oasis_var
13  USE mod_oasis_sys
14  USE mod_oasis_io
15  USE mod_oasis_mpi
16  USE mct_mod
17 
18  implicit none
19  private
20 
21  public oasis_get_localcomm
22  public oasis_set_couplcomm
24  public oasis_get_debug
25  public oasis_set_debug
26  public oasis_get_intercomm
27  public oasis_get_intracomm
28  public oasis_get_ncpl
29  public oasis_put_inquire
30  public oasis_get_freqs
31 
32 #include "oasis_os.h"
33 
34  integer(kind=ip_i4_p) istatus(mpi_status_size)
35 
36 !---------------------------------------------------------------------
37  CONTAINS
38 !---------------------------------------------------------------------
39 
40 !> OASIS user query for the local MPI communicator
41 
42  SUBROUTINE oasis_get_localcomm(localcomm,kinfo)
43 
44  IMPLICIT NONE
45 
46  INTEGER (kind=ip_intwp_p),intent(out) :: localcomm !< MPI communicator
47  INTEGER (kind=ip_intwp_p),intent(inout),optional :: kinfo !< return code
48 ! ---------------------------------------------------------
49  character(len=*),parameter :: subname = '(oasis_get_localcomm)'
50 ! ---------------------------------------------------------
51 
52  call oasis_debug_enter(subname)
53  if (present(kinfo)) then
54  kinfo = oasis_ok
55  endif
56 
57  ! from prism_data
58  localcomm = mpi_comm_local
59  IF (oasis_debug >= 2) THEN
60  WRITE(nulprt,*) 'localcomm :',localcomm
61  CALL oasis_flush(nulprt)
62  ENDIF
63 
64  call oasis_debug_exit(subname)
65 
66  END SUBROUTINE oasis_get_localcomm
67 !----------------------------------------------------------------------
68 
69 !> OASIS user call to specify a local communicator
70 
71  SUBROUTINE oasis_set_couplcomm(localcomm,kinfo)
72 
73  IMPLICIT NONE
74 
75  INTEGER (kind=ip_intwp_p),intent(in) :: localcomm !< MPI communicator
76  INTEGER (kind=ip_intwp_p),intent(inout),optional :: kinfo !< return code
77 ! ---------------------------------------------------------
78  integer(kind=ip_intwp_p) :: ierr
79  character(len=*),parameter :: subname = '(oasis_set_couplcomm)'
80 ! ---------------------------------------------------------
81 
82  call oasis_debug_enter(subname)
83  if (present(kinfo)) then
84  kinfo = oasis_ok
85  endif
86 
87  !------------------------
88  !--- update mpi_comm_local from component
89  !------------------------
90 
91  mpi_comm_local = localcomm
92 
93  !------------------------
94  !--- and now update necessary info
95  !------------------------
96 
97  mpi_size_local = -1
98  mpi_rank_local = -1
99  if (mpi_comm_local /= mpi_comm_null) then
100  CALL mpi_comm_size(mpi_comm_local,mpi_size_local,ierr)
101  CALL mpi_comm_rank(mpi_comm_local,mpi_rank_local,ierr)
102  mpi_root_local = 0
103  endif
104 
105  call oasis_debug_exit(subname)
106 
107  END SUBROUTINE oasis_set_couplcomm
108 !----------------------------------------------------------------------
109 
110 !> OASIS user call to create a new communicator
111 
112  SUBROUTINE oasis_create_couplcomm(icpl,allcomm,cplcomm,kinfo)
114  IMPLICIT NONE
115 
116  INTEGER (kind=ip_intwp_p),intent(in) :: icpl !< coupling process flag
117  INTEGER (kind=ip_intwp_p),intent(in) :: allcomm !< input MPI communicator
118  INTEGER (kind=ip_intwp_p),intent(out) :: cplcomm !< reduced MPI communicator
119  INTEGER (kind=ip_intwp_p),intent(inout),optional :: kinfo !< return code
120 ! ---------------------------------------------------------
121  integer(kind=ip_intwp_p) :: ierr
122  character(len=*),parameter :: subname = '(oasis_create_couplcomm)'
123 ! ---------------------------------------------------------
124 
125  call oasis_debug_enter(subname)
126  if (present(kinfo)) then
127  kinfo = oasis_ok
128  endif
129 
130  !------------------------
131  !--- generate cplcomm from allcomm and icpl
132  !------------------------
133 
134  CALL mpi_comm_split(allcomm,icpl,1,cplcomm,ierr)
135  IF (ierr /= 0) THEN
136  WRITE (nulprt,*) subname,estr,'MPI_Comm_Split ierr = ',ierr
137  call oasis_abort(file=__file__,line=__line__)
138  ENDIF
139 
140  !------------------------
141  !--- update mpi_comm_local from component
142  !------------------------
143 
144  call oasis_set_couplcomm(cplcomm)
145 
146  IF (oasis_debug >= 2) THEN
147  WRITE (nulprt,*) 'New local coupling comm =',cplcomm
148  CALL oasis_flush(nulprt)
149  ENDIF
150 
151  call oasis_debug_exit(subname)
152 
153  END SUBROUTINE oasis_create_couplcomm
154 !----------------------------------------------------------------------
155 
156 !> OASIS user interface to query debug level
157 
158  SUBROUTINE oasis_get_debug(debug,kinfo)
160  IMPLICIT NONE
161 
162  INTEGER (kind=ip_intwp_p),intent(out) :: debug !< debug level
163  INTEGER (kind=ip_intwp_p),intent(inout),optional :: kinfo !< return code
164 ! ---------------------------------------------------------
165  character(len=*),parameter :: subname = '(oasis_get_debug)'
166 ! ---------------------------------------------------------
167 
168  call oasis_debug_enter(subname)
169  if (present(kinfo)) then
170  kinfo = oasis_ok
171  endif
172 
173  debug = oasis_debug
174 
175  call oasis_debug_exit(subname)
176 
177  END SUBROUTINE oasis_get_debug
178 !----------------------------------------------------------------------
179 
180 !> OASIS user interface to set debug level
181 
182  SUBROUTINE oasis_set_debug(debug,kinfo)
184  IMPLICIT NONE
185 
186  INTEGER (kind=ip_intwp_p),intent(in) :: debug !< debug level
187  INTEGER (kind=ip_intwp_p),intent(inout),optional :: kinfo !< return code
188 ! ---------------------------------------------------------
189  character(len=*),parameter :: subname = '(oasis_set_debug)'
190 ! ---------------------------------------------------------
191 
192  call oasis_debug_enter(subname)
193  if (present(kinfo)) then
194  kinfo = oasis_ok
195  endif
196 
197  oasis_debug = debug
198  if (oasis_debug >= 2) then
199  write(nulprt,*) subname,' set OASIS_debug to ',oasis_debug
200  CALL oasis_flush(nulprt)
201  endif
202 
203  call oasis_debug_exit(subname)
204 
205  END SUBROUTINE oasis_set_debug
206 !----------------------------------------------------------------------
207 
208 !> OASIS user interface to establish an intercomm communicator between the root of two models
209 
210  SUBROUTINE oasis_get_intercomm(new_comm, cdnam, kinfo)
212  IMPLICIT NONE
213 
214  INTEGER (kind=ip_intwp_p),intent(out) :: new_comm !< out MPI communicator
215  CHARACTER(len=*),intent(in) :: cdnam !< other model name to link with
216  INTEGER (kind=ip_intwp_p),intent(out),optional :: kinfo !< return code
217 
218  integer(kind=ip_intwp_p) :: n, il, ierr, tag
219  LOGICAL :: found
220 ! ---------------------------------------------------------
221  character(len=*),parameter :: subname = '(oasis_get_intercomm)'
222 ! ---------------------------------------------------------
223 
224  call oasis_debug_enter(subname)
225  if (present(kinfo)) then
226  kinfo = oasis_ok
227  endif
228 
229  found = .false.
230  do n = 1,prism_amodels
231  if (trim(cdnam) == trim(prism_modnam(n))) then
232  if (found) then
233  write(nulprt,*) subname,estr,'found same model name twice'
234  call oasis_abort(file=__file__,line=__line__)
235  endif
236  il = n
237  found = .true.
238  endif
239  enddo
240 
241  if (.not. found) then
242  write(nulprt,*) subname,estr,'input model name not found'
243  call oasis_abort(file=__file__,line=__line__)
244  endif
245 
246  IF (oasis_debug >= 2) THEN
247  WRITE(nulprt,*) subname, 'cdnam :',trim(cdnam),' il :',il, &
248  'mpi_root_global(il) :',mpi_root_global(il),&
249  'mpi_comm_local :',mpi_comm_local
250  CALL oasis_flush(nulprt)
251  ENDIF
252 
253  tag=ichar(trim(compnm))+ichar(trim(cdnam))
254  CALL mpi_intercomm_create(mpi_comm_local, 0, mpi_comm_global, &
255  mpi_root_global(il), tag, new_comm, ierr)
256 
257  call oasis_debug_exit(subname)
258 
259  END SUBROUTINE oasis_get_intercomm
260 !----------------------------------------------------------------------
261 
262 !> OASIS user interface to establish an intracomm communicator between the root of two models
263 
264  SUBROUTINE oasis_get_intracomm(new_comm, cdnam, kinfo)
266  IMPLICIT NONE
267 
268  INTEGER (kind=ip_intwp_p),intent(out) :: new_comm !< output MPI communicator
269  CHARACTER(len=*),intent(in) :: cdnam !< other model name
270  INTEGER (kind=ip_intwp_p),intent(out),optional :: kinfo !< return code
271 
272  integer(kind=ip_intwp_p) :: tmp_intercomm
273  integer(kind=ip_intwp_p) :: ierr
274 ! ---------------------------------------------------------
275  character(len=*),parameter :: subname = '(oasis_get_intracomm)'
276 ! ---------------------------------------------------------
277 
278  call oasis_debug_enter(subname)
279  if (present(kinfo)) then
280  kinfo = oasis_ok
281  endif
282 
283  call oasis_get_intercomm(tmp_intercomm, cdnam, kinfo)
284 
285  CALL mpi_intercomm_merge(tmp_intercomm,.false., new_comm, ierr)
286 
287  call oasis_debug_exit(subname)
288 
289  END SUBROUTINE oasis_get_intracomm
290 !----------------------------------------------------------------------
291 
292 !> OASIS user query for the number of unique couplings associated with a variable
293 
294  SUBROUTINE oasis_get_ncpl(varid, ncpl, kinfo)
296  IMPLICIT none
297  !-------------------------------------
298  INTEGER(kind=ip_i4_p) , INTENT(in) :: varid !< variable id
299  INTEGER(kind=ip_i4_p) , INTENT(out) :: ncpl !< number of namcouple couplings
300  INTEGER(kind=ip_i4_p) , INTENT(out) :: kinfo !< return code
301  !-------------------------------------
302  CHARACTER(len=ic_lvar) :: vname
303  CHARACTER(len=*),PARAMETER :: subname = 'oasis_get_ncpl'
304  !-------------------------------------
305 
306  CALL oasis_debug_enter(subname)
307 
308  IF (mpi_comm_local == mpi_comm_null) THEN
309  WRITE(nulprt,*) subname,estr,'called on non coupling task'
310  call oasis_abort(file=__file__,line=__line__)
311  ENDIF
312 
313  kinfo = oasis_ok
314  vname = prism_var(varid)%name
315 
316  IF (varid == oasis_var_uncpl) THEN
317  WRITE(nulprt,*) subname,estr,'Routine is called for an invalid varid'
318  call oasis_abort(file=__file__,line=__line__)
319  ENDIF
320 
321  ncpl = prism_var(varid)%ncpl
322 
323  IF (ncpl <= 0) THEN
324  IF (oasis_debug >= 2) WRITE(nulprt,*) subname,' Variable not coupled ',&
325  trim(vname)
326  ELSE
327  IF (oasis_debug >= 2) WRITE(nulprt,*) subname,' Variable: ',trim(vname),&
328  ' used in ',ncpl,' couplings'
329  ENDIF
330 
331  CALL oasis_debug_exit(subname)
332 
333  END SUBROUTINE oasis_get_ncpl
334 !---------------------------------------------------------------------
335 
336 !> OASIS user query for the coupling periods for a given variable
337 
338  SUBROUTINE oasis_get_freqs(varid, mop, ncpl, cpl_freqs, kinfo)
340  IMPLICIT none
341  !-------------------------------------
342  INTEGER(kind=ip_i4_p) , INTENT(in) :: varid !< variable id
343  INTEGER(kind=ip_i4_p) , INTENT(in) :: mop !< OASIS_Out or OASIS_In type
344  INTEGER(kind=ip_i4_p) , INTENT(in) :: ncpl !< number of namcouple couplings
345  INTEGER(kind=ip_i4_p) , INTENT(out) :: cpl_freqs(ncpl)!< coupling period (sec)
346  INTEGER(kind=ip_i4_p) , INTENT(out) :: kinfo !< return code
347  !-------------------------------------
348  CHARACTER(len=ic_lvar) :: vname
349  INTEGER(kind=ip_i4_p) :: ncpl_calc, cplid, nc
350  CHARACTER(len=*),PARAMETER :: subname = 'oasis_get_freqs'
351  !-------------------------------------
352 
353  CALL oasis_debug_enter(subname)
354 
355  IF (mpi_comm_local == mpi_comm_null) THEN
356  WRITE(nulprt,*) subname,estr,'called on non coupling task'
357  call oasis_abort(file=__file__,line=__line__)
358  ENDIF
359 
360  kinfo = oasis_ok
361  vname = prism_var(varid)%name
362 
363  IF (varid == oasis_var_uncpl) THEN
364  WRITE(nulprt,*) subname,estr,'Routine is called for an invalid varid'
365  call oasis_abort(file=__file__,line=__line__)
366  ENDIF
367 
368  ncpl_calc = prism_var(varid)%ncpl
369 
370  IF (ncpl_calc /= ncpl) THEN
371  WRITE(nulprt,*) subname,estr,' Wrong number of couplings for variable: ',trim(vname), &
372  ncpl_calc, ncpl
373  call oasis_abort(file=__file__,line=__line__)
374  ENDIF
375 
376  IF (ncpl <= 0) THEN
377  IF (oasis_debug >= 2) WRITE(nulprt,*) subname,' variable not coupled ',&
378  trim(vname)
379  ENDIF
380 
381  DO nc = 1,ncpl
382  cplid = prism_var(varid)%cpl(nc)
383  IF (mop == oasis_out) THEN
384  cpl_freqs(nc) = prism_coupler_put(cplid)%dt
385  ENDIF
386  IF (mop == oasis_in ) THEN
387  cpl_freqs(nc) = prism_coupler_get(cplid)%dt
388  ENDIF
389 
390  IF (oasis_debug >=2 ) THEN
391  WRITE(nulprt,*) subname,' Coupling frequency of this field ',trim(vname),&
392  ' for coupling ',nc, ' is ',cpl_freqs(nc)
393  ENDIF
394 
395  IF (cpl_freqs(nc) .le. 0) THEN
396  WRITE(nulprt,*) subname,estr,' The coupling frequency is < or equal to 0'
397  call oasis_abort(file=__file__,line=__line__)
398  ENDIF
399  ENDDO
400 
401  CALL oasis_debug_exit(subname)
402 
403  END SUBROUTINE oasis_get_freqs
404 !---------------------------------------------------------------------
405 
406 !> OASIS user query to indicate put return code expected at a specified time for a given variable
407 
408  SUBROUTINE oasis_put_inquire(varid,msec,kinfo)
410  IMPLICIT none
411  !-------------------------------------
412  integer(kind=ip_i4_p) , intent(in) :: varid !< variable id
413  integer(kind=ip_i4_p) , intent(in) :: msec !< model time in seconds
414  integer(kind=ip_i4_p) , intent(out) :: kinfo !< return code
415  !-------------------------------------
416  character(len=ic_lvar) :: vname
417  INTEGER(kind=ip_i4_p) :: ncpl, nc, cplid
418  INTEGER(kind=ip_i4_p) :: lag, mseclag, trans, dt, getput, maxtime
419  LOGICAL :: time_now, sndrcv, output
420  character(len=*),parameter :: subname = 'oasis_put_inquire'
421  !-------------------------------------
422 
423  CALL oasis_debug_enter(subname)
424 
425  IF (mpi_comm_local == mpi_comm_null) THEN
426  WRITE(nulprt,*) subname,estr,'called on non coupling task'
427  call oasis_abort(file=__file__,line=__line__)
428  ENDIF
429 
430  kinfo = oasis_ok
431  vname = prism_var(varid)%name
432 
433  IF (varid == oasis_var_uncpl) THEN
434  WRITE(nulprt,*) subname,estr, &
435  'Routine oasis_put is called for a variable not in namcouple: it will not be sent'
436  call oasis_abort(file=__file__,line=__line__)
437  ENDIF
438 
439  ncpl = prism_var(varid)%ncpl
440 
441  IF (ncpl <= 0) THEN
442  IF (oasis_debug >= 2) WRITE(nulprt,*) subname,' variable not coupled ',&
443  trim(vname)
444  ENDIF
445 
446  DO nc = 1,ncpl
447 
448  cplid = prism_var(varid)%cpl(nc)
449  dt = prism_coupler_put(cplid)%dt
450  lag = prism_coupler_put(cplid)%lag
451  getput = prism_coupler_put(cplid)%getput
452  sndrcv = prism_coupler_put(cplid)%sndrcv
453  maxtime = prism_coupler_put(cplid)%maxtime
454  output = prism_coupler_put(cplid)%output
455  trans = prism_coupler_put(cplid)%trans
456 
457  !------------------------------------------------
458  ! check that lag is reasonable
459  !------------------------------------------------
460 
461  IF (abs(lag) > dt) THEN
462  WRITE(nulprt,*) subname,estr,' ERROR lag gt dt for cplid',cplid
463  call oasis_abort(file=__file__,line=__line__)
464  ENDIF
465 
466  !------------------------------------------------
467  ! check that field is OASIS_PUT
468  !------------------------------------------------
469 
470  IF (getput == oasis3_get) THEN
471  WRITE(nulprt,*) subname,estr,'routine can only be called for OASIS_PUT variable'
472  call oasis_abort(file=__file__,line=__line__)
473  ENDIF
474 
475  CALL oasis_debug_note(subname//' set mseclag')
476  IF (getput == oasis3_put) THEN
477  mseclag = msec + lag
478  ENDIF
479 
480  !------------------------------------------------
481  ! check that model hasn't gone past maxtime
482  !------------------------------------------------
483 
484  if (msec >= maxtime) then
485  write(nulprt,*) subname,' at ',msec,mseclag,' ERROR: ',trim(vname)
486  write(nulprt,*) subname,estr,'model time beyond namcouple maxtime',&
487  msec,maxtime
488  call oasis_abort(file=__file__,line=__line__)
489  endif
490 
491  time_now = .false.
492  IF (mod(mseclag,dt) == 0) time_now = .true.
493 
494  !-------------------------------------------------------------------
495  ! Test what is the current status of the field if time_now = .TRUE.
496  !-------------------------------------------------------------------
497 
498  IF (time_now .EQV. .true.) THEN
499 
500  IF (oasis_debug >= 2) THEN
501  WRITE(nulprt,*) subname,' Coupling time for : ',trim(vname)
502  WRITE(nulprt,*) subname,' Coupling time for var for nc : ',&
503  trim(mct_avect_exportrlist2c(prism_coupler_put(cplid)%avect1)),nc
504  WRITE(nulprt,*) subname,' dt,msec,mseclag = ',dt,msec,mseclag
505  CALL oasis_flush(nulprt)
506  ENDIF
507 
508  IF ( (trans == ip_average) .OR. (trans == ip_accumul) .OR. (trans == ip_max) &
509  .OR. (trans == ip_min) ) THEN
510  IF (kinfo == oasis_ok) kinfo = oasis_loctrans
511  IF (oasis_debug >= 2) THEN
512  WRITE(nulprt,*) subname,' status at ',msec,mseclag,' WTRN '
513  CALL oasis_flush(nulprt)
514  ENDIF
515  ENDIF
516 
517  !-------------------------------------------------------------------
518  ! past namcouple runtime (maxtime) no communication
519  ! do restart if time+lag = maxtime, this assumes coupling
520  ! period and lag and maxtime are all nicely consistent
521  !-------------------------------------------------------------------
522  IF (mseclag >= maxtime) THEN
523  IF (getput == oasis3_put .AND. lag > 0 .AND. mseclag == maxtime) THEN
524  kinfo = oasis_torest
525  IF (oasis_debug >= 2) THEN
526  WRITE(nulprt,*) subname,' status at ',msec,mseclag,' WRST '
527  CALL oasis_flush(nulprt)
528  ENDIF
529  ENDIF
530  ENDIF
531 
532  !------------------------------------------------
533  ! communication
534  !------------------------------------------------
535  IF (sndrcv) THEN
536  IF (getput == oasis3_put) THEN
537  kinfo = oasis_sent
538  IF (oasis_debug >= 2) THEN
539  WRITE(nulprt,*) subname,' status at ',msec,mseclag,' will be SENT '
540  CALL oasis_flush(nulprt)
541  ENDIF
542  ENDIF
543  ENDIF
544 
545  !------------------------------------------------
546  ! save debug file if EXPOUT or OUTPUT
547  !------------------------------------------------
548  IF (output) THEN
549  IF (kinfo == oasis_sent) THEN
550  kinfo = oasis_sentout
551  ELSEIF (kinfo == oasis_torest) THEN
552  kinfo = oasis_torestout
553  ELSE
554  kinfo = oasis_output
555  ENDIF
556  IF (oasis_debug >= 2) THEN
557  WRITE(nulprt,*) subname,' status at ',msec,mseclag,' will be WRIT '
558  CALL oasis_flush(nulprt)
559  ENDIF
560  ENDIF
561 
562  !------------------------------------------------
563  ! sav non-instant loctrans operations for future restart
564  ! at the end of the run only
565  !------------------------------------------------
566 
567  IF (mseclag + dt >= maxtime .AND. &
568  getput == oasis3_put .and. trans /= ip_instant) then
569  IF (oasis_debug >= 2) THEN
570  WRITE(nulprt,*) subname,' at ',msec,mseclag,' will be WTRN: '
571  CALL oasis_flush(nulprt)
572  ENDIF
573  ENDIF
574  ELSE
575  IF (oasis_debug >=2) THEN
576  WRITE(nulprt,*) 'Nothing to do'
577  ENDIF
578  ENDIF ! time_now
579 
580  IF (oasis_debug >= 2) THEN
581  WRITE(nulprt,*) subname,' kinfo: ',kinfo
582  CALL oasis_flush(nulprt)
583  ENDIF
584  ENDDO ! nc
585 
586  CALL oasis_debug_exit(subname)
587 
588  END SUBROUTINE oasis_put_inquire
589 
590 !---------------------------------------------------------------------------------
592 
System type methods.
integer(kind=ip_intwp_p), parameter oasis_sentout
subroutine, public oasis_debug_note(string)
Used to write information from a subroutine, write info to log file at some debug level...
Provides a common location for several OASIS variables.
Provides reusable IO routines for OASIS.
Definition: mod_oasis_io.F90:4
integer(kind=ip_intwp_p), parameter oasis_ok
integer(kind=ip_intwp_p), parameter oasis_in
integer(kind=ip_i4_p) mpi_size_local
Auxiliary OASIS user interfaces.
integer(kind=ip_intwp_p) nulprt
integer(kind=ip_i4_p) mpi_comm_global
type(prism_coupler_type), dimension(:), pointer, public prism_coupler_get
prism_coupler get array
integer(kind=ip_intwp_p), parameter ip_instant
subroutine, public oasis_get_intercomm(new_comm, cdnam, kinfo)
OASIS user interface to establish an intercomm communicator between the root of two models...
subroutine, public oasis_abort(id_compid, cd_routine, cd_message, file, line, rcode)
OASIS abort method, publically available to users.
type(prism_coupler_type), dimension(:), pointer, public prism_coupler_put
prism_coupler put array
integer(kind=ip_intwp_p), parameter oasis_sent
integer(kind=ip_intwp_p), parameter oasis_torestout
subroutine, public oasis_get_intracomm(new_comm, cdnam, kinfo)
OASIS user interface to establish an intracomm communicator between the root of two models...
integer(kind=ip_intwp_p), parameter ip_min
integer(kind=ip_intwp_p), parameter oasis_torest
Initialize the OASIS coupler infrastructure.
integer(kind=ip_i4_p) mpi_rank_local
integer(kind=ip_intwp_p), parameter ip_accumul
Defines kinds for OASIS.
integer(kind=ip_i4_p) prism_amodels
Provides a generic and simpler interface into MPI calls for OASIS.
subroutine, public oasis_set_couplcomm(localcomm, kinfo)
OASIS user call to specify a local communicator.
integer(kind=ip_intwp_p), parameter oasis3_get
subroutine, public oasis_set_debug(debug, kinfo)
OASIS user interface to set debug level.
integer(kind=ip_i4_p) mpi_root_local
subroutine, public oasis_debug_enter(string)
Used when a subroutine is entered, write info to log file at some debug level.
integer(kind=ip_i4_p), dimension(mpi_status_size) istatus
subroutine, public oasis_get_freqs(varid, mop, ncpl, cpl_freqs, kinfo)
OASIS user query for the coupling periods for a given variable.
integer(kind=ip_intwp_p), parameter oasis3_put
integer(kind=ip_intwp_p), parameter oasis_output
integer(kind=ip_i4_p), dimension(:), allocatable mpi_root_global
subroutine, public oasis_get_ncpl(varid, ncpl, kinfo)
OASIS user query for the number of unique couplings associated with a variable.
integer(kind=ip_intwp_p), parameter ip_max
Defines parameters for OASIS.
integer(kind=ip_intwp_p), parameter oasis_loctrans
OASIS variable data and methods.
character(len=ic_lvar) compnm
integer(kind=ip_i4_p) oasis_debug
integer(kind=ip_intwp_p), parameter oasis_out
character(len= *), parameter, public estr
integer(kind=ip_i4_p) mpi_comm_local
subroutine, public oasis_get_debug(debug, kinfo)
OASIS user interface to query debug level.
integer(kind=ip_intwp_p), parameter ip_average
integer(kind=ip_intwp_p), parameter oasis_var_uncpl
subroutine, public oasis_get_localcomm(localcomm, kinfo)
OASIS user query for the local MPI communicator.
subroutine, public oasis_flush(nu)
Flushes output to file.
integer, parameter ip_intwp_p
subroutine, public oasis_put_inquire(varid, msec, kinfo)
OASIS user query to indicate put return code expected at a specified time for a given variable...
subroutine, public oasis_create_couplcomm(icpl, allcomm, cplcomm, kinfo)
OASIS user call to create a new communicator.
Performance timer methods.
type(prism_var_type), dimension(:), pointer, public prism_var
list of defined variables
subroutine, public oasis_debug_exit(string)
Used when a subroutine is exited, write info to log file at some debug level.
character(len=ic_lvar), dimension(prism_mmodels) prism_modnam